import re
import os
import tempfile
import sys
import klammer_base
import urllib
import kutil

def html_link(target, link_text, is_section, no_quotation_marks):
    # [__link__target__text__]
    if not link_text:
        if is_section:
            link_text = target if no_quotation_marks else f"“{target}”"
        else:
            # Allow long URLs to break at a slash:
            link_text = re.sub('/', '/<wbr/>', target)
            link_text = re.sub('/<wbr/>/<wbr/>', '//', link_text)
            link_text = f'<tt>{link_text}</tt>'
    target = f"[{target}]" if is_section else target
    #result = f"[__link__{target}__{link_text}__]"
    #return result

    if target.startswith("http") or ".html" in target:
        url = target
    elif is_section:
        url = f"__sectionlink__{target}__"
    else:
        url = f"^#{target}"
    result = f'<a href="{url}">{link_text}</a>'
    return result

def add_latex_footnote_if_necessary(url, link_text):
    result = ""
    if (('http://' in url or 'https://' in url) and
        ('http://' not in link_text and 'https://' not in link_text)):
        escaped_url = re.sub('#', '\\#', url)
        escaped_url = re.sub('%', '\\%', escaped_url)
        result += f'\\footnote{{\\\rule{{0pt}}{{12pt}}\\texttt{{{escaped_url}}}}}'
    return result

def latex_link(target, link_text, is_section, no_quotation_marks, add_footnote):
    if target.startswith("http"):
        if link_text and link_text != "URL":
            result = f"#/ \\href{{{target}}}{{{link_text}}} #/"
        else:
            #result = f"\\\url{{{target}}}"
            result = f"#/ \\href{{{target}}}{{{target}}} #/"
    elif is_section:
        if not link_text:
            link_text = target if no_quotation_marks else f"``{target}''"
        result = f"\\hyperlink{{__seclink__{target}__}}{{{link_text}}}"
    else:
        result = f"\\hyperlink{{{target}}}{{{link_text}}}"
    #    if add_footnote:
    # if self.footnote:
    #    result += add_latex_footnote_if_necessary(target, link_text)
    # print(result)
    return result

class Link(klammer_base.Klammer_base):
    def __init__(self, K):
        super().__init__(K)
        # self.show("Link")
          
    def html(self):
        return html_link(self.target, self.text, self.section, self.nq)

    def tex(self):
        return latex_link(self.target, self.text, self.section, self.nq, self.footnote)

    def txt(self):
        text = f'{self.text} ' if self.text else ''
        return f'{text}[{self.url}]'

class Target(klammer_base.Klammer_base):
    def __init__(self, K):
        super().__init__(K)
        id = K.id.strip()
        id = re.compile(r'\s+', re.S).sub('-', id)
        self.id = re.sub('_', '-', id)
    
    def html(self):
        id = self.id.split(':')[-1]
        return f'<span id="{id}">{self.text}</span>'

    def tex(self):
        result = f'\\hypertarget{{{self.id}}}{{{self.text}}}'
        #result += '\\label{{{}-label}}'.format(id)
        return result

# Better to fail than return nothing; not possible to have a target in a text file.
#    def txt(self):
#        return ""


class Email(klammer_base.Klammer_base):
    def __init__(self, K):
        super().__init__(K)

    def html(self):
        def val(attr, s):
            return "{}={}&".format(attr, re.sub(" ", "%20", s))
        domain = "&^#46;".join(self.domain.split("."))
        address =  "{}&^#64;{}".format(self.name, domain)
        href = "mailto&^#58;{}?".format(address)
        if self.subject:
            href += val("subject", self.subject)
        if self.body:
            href += val("body", self.body)
        href = href[:-1]
        result = '<a href="{}" class="monospace">{}</a>'.format(href, address)
        return result

    def tex(self):
        return r'\texttt{{{}^@{}}}'.format(self.name, self.domain)

