"""
    utils.py - Utility functions for the project.
"""
import logging
import re


def postprocess(text: str):
    """
    postprocess - remove common values in scraped dataset

    Args:
        text (str): the text to postprocess
    """

    replacements = {
        "ENA": "COMPANY",
        "Enron": "COMPANY",
        "Enron Corporation": "COMPANY",
        "Sony Pictures Entertainment": "COMPANY",
        "Columbia Pictures": "COMPANY",
        "Sony": "COMPANY",
        "Columbia": "COMPANY",
        "Hillary": "Jane",
        "Clinton": "Smith",
        "Amy": "Jane",
        "Sara": "Jane",
        "Harambe": "Jane",
        "Pascal": "PERSON",
    }

    # replace common values, also check lowercase
    for k, v in replacements.items():
        text = text.replace(k, v)
        text = text.replace(k.lower(), v)

    return text


def clear(text, verbose=False, **kwargs):
    """for use with buttons"""
    if verbose:
        logging.info(f"Clearing text: {text}")
    return ""


def make_email_link(
    subject: str = "Email subject - This was generated by Postbot",
    link_text: str = "click to open in your email client",
    body: str = None,
    tag_placeholder: str = "PLACEHOLDER",
):
    """
    email_link - generate an email link

    Args:
        subject (str, optional): the subject of the email. Defaults to "Email subject - This was generated by Postbot".
        link_text (str, optional): the text of the link. Defaults to "click to open in your email client".
        body (str, optional): the body of the email. Defaults to None.
        tag_placeholder (str, optional): the placeholder for the tag. Defaults to "PLACEHOLDER".

    Returns:
        str: the email link, in the form of an html link
    """

    if body is None:
        body = "hmm - no body. replace me"

    # strip brackets and other HTML-tag characters from body with regex
    body = re.sub(r"<[^>]*>", tag_placeholder, body)

    # replace all newline chars with a whitespace
    body = body.replace("\n", " ")

    nice_html_button = f"""<!DOCTYPE html>
    <html>
    <head>
        <title>Generated Email</title>
    <style>
        body {{
            font-family: sans-serif;
            font-size: 1.2em;
        }}
        .button {{
            background-color: #6CCEC6;
            border: none;
            color: white;
            padding: 15px 32px;
            text-align: center;
            text-decoration: none;
            display: inline-block;
            font-size: 16px;
            margin: 4px 2px;
            cursor: pointer;
            value: "Send Email";
        }}
    </style>
    <button class="button" onclick="window.location.href='mailto:?subject={subject}&body={body}'">{link_text} value="Open in Email client"</button>
    </html>"""

    # return f'<a href="mailto:%20?subject={subject}&body={body}">{link_text}</a>'
    return nice_html_button


def make_mailto_form(
    body: str = None,
    subject: str = "This email was generated by Postbot with AI!",
    cc_email: str = "",
):
    """Returns a mailto link with the given parameters"""

    if body is None:
        body = "hmm - no body. Replace me or try rerunning the model."

    template = f"""<!DOCTYPE html>
    <html>
    <head>
        <title>Generated Email</title>
    <style>
        body {{
            font-family: sans-serif;
            font-size: 1.2em;
        }}
        .button {{
            background-color: #6CCEC6;
            border: none;
            color: white;
            padding: 15px 32px;
            text-align: center;
            text-decoration: none;
            display: inline-block;
            font-size: 16px;
            margin: 4px 2px;
            cursor: pointer;
            value: "Send Email";
        }}
    </style>
    </head>
    <body>
        <h1>Adjust and Open in your mail client:</h1>
        <form action="mailto:" method="get" enctype="text/plain">

        <div>
            <label for="cc">CC Email:
            <input type="text" name="cc" id="cc" value="{cc_email}"/>
            </label>
        </div>
        <div>
            <label for="subject">Subject:
            <input type="text" name="subject" id="subject" value="{subject}"/>
            </label>
        </div>
        <div>
            <label>Email Body:</label>
            <br />
            <textarea name="body" id="body" rows="12" cols="35">{body}</textarea>
        </div>
        <div>
            <input type="submit" name="submit" value="Open in Email App" class="button"/>
        </div>
        </form>
    </body>
    </html>"""

    return template