#!/usr/bin/env python3

# copy-bookmark
#   copies links to specific headers/elements of a page
#   by Dakedres
# 
# I guessed at how Python works.
# Based on https://github.com/LaurenceWarne/qute-code-hint/blob/master/code_select.py

# It is recommended you add this to your config.py to use this script:
    # c.hints.selectors["bookmarks"] = [
    #     "h1[id]",
    #     "h2[id]",
    #     "h3[id]",
    #     "h4[id]",
    #     "h5[id]",
    #     "h6[id]",
    #     "h1 > a[id]",
    #     "h2 > a[id]",
    #     "h3 > a[id]",
    #     "h4 > a[id]",
    #     "h5 > a[id]",
    #     "h6 > a[id]",
    #     "header[id]",
    #     "footer[id]",
    #     "article[id]",
    #     "section[id]",
    #     "p[id]",
    #     "div[itemtype=\"https://schema.org/Answer\"]" # Stackoverflow answers
    # ]
# And call it with
    # hint bookmarks userscript copy-bookmark

import os
from urllib.parse import urlparse, urlunparse
from html.parser import HTMLParser

class BookmarkParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        for attr in attrs:
            print(attr[0])
            if(attr[0] == "id"):
                self.bookmark_id = attr[1]
    
    def close(self):
        HTMLParser.close(self)
        return self.bookmark_id

def send_to_qute(command):
    with open(os.environ.get("QUTE_FIFO"), "w") as f:
        f.write(command)

def construct_bookmark_url():
    parser = BookmarkParser()
    parser.feed(os.environ.get("QUTE_SELECTED_HTML"))
    bookmark_id = parser.close()

    url = urlparse(os.environ.get("QUTE_CURRENT_URL") )
    url = url._replace(fragment=bookmark_id)
    
    return urlunparse(url)

def main():
    send_to_qute("yank inline '{url}'".format(url=construct_bookmark_url() ) )

if __name__ == "__main__":
    main()