# AGPL 3 or any later version
# (C) J.Y.Amihud ( Blender Dumbass )

import os
import json

from modules import Set
from modules.Common import *

def guess_type(path):

    if "/json/" in path or ".json" in path:
        return "application/json"
    if "/css" in path or ".css" in path:
        return "text/css"
    if "/icon" in path or path.endswith(".png"):
        return "image/png"
    if path.endswith("jpg"):
        return "image/jpg"

    return "text/html"
    
def headers(server, code):

    # Basic cookie for logins to work
    cookie = False
    if "Cookie" not in str(server.headers):
        cookie = True
        
    server.send_response(code)
    server.send_header("Content-type", guess_type(server.path))

    if cookie:
        server.send_header("Set-Cookie", RandString())
        
    server.end_headers()

def head(title="", description="", image="", config={}):

    if image.startswith("/"): image = config.get("url","")+image

    favicon = config.get("favicon", "/icon/internet")
    
    html = """    
    <!-- The head. Part of the HTML code where metadata about the page is storred.
    Including the metadata readable by social media websites, when generating link
    previwews, which are called mata-tags in HTML. -->

    <meta charset="utf-8">

    <title>"""+title+"""</title> <!-- Title in the browser tab -->
    <link media="all" href="/css" type="text/css" rel="stylesheet" /> <!-- CSS theme link -->
    <link rel="icon" href=\""""+favicon+""""> <!-- Tiny image in the tab -->

    <!-- Now meta tags for social media -->

    <meta property="og:site_name" content=\""""+config.get("title", "My Website")+"""">
    <meta property="og:title" content=\""""+title+"""">
    <meta property="og:description" content=\""""+description+"""">
    <meta property="og:image" content=\""""+image+"""">

    </head>
    <body>

    """

    return html

def send(server, html, code):

    # Add headers
    headers(server, code)
    server.wfile.write(html.encode("utf-8"))
    
def tabs():

    folder = Set.Folder()+"/tabs"
    tabs = {}
    for tab in sorted(list(os.walk(folder))[0][1]):
        try:
            with open(folder+"/"+tab+"/config.json") as o:
                data = json.load(o)
                tabs[tab] = data
        except Exception as e:
            print(e)
            pass
    
    return tabs
        
    
def MainPage(server):
    
    # Reading config
    config = Set.Load()

    # Generating <head>
    html = head(title       = config.get("title", "Website"),
                description = config.get("description", "Description"),
                config      = config
                )


    html = html + """
    
    <br>
    <br>
    <center>
    <img src=\""""+config.get("favicon", "icon/internet")+"""" alt="[LOGO]" style="height:150px;vertical-align: middle">
    <br>
    <br>

    <h2>"""+config.get("title", "My Website")+"""</h2>
    """+config.get("tagline", "")+"""
    <br>
    <br>


    """
    Tabs = tabs()
    for tab in Tabs:
        
        html = html + Button(Tabs[tab].get("title", tab),
                             "/"+tab,
                             Tabs[tab].get("icon", "folder"))
        
    
    send(server, html, 200)
    
def Button(text, link, icon=""):

    html = """
    <a class="button" href=\""""+link+"""">"""
    if icon:
        html = html + """
        <img src="/icon/"""+icon+"""" style="vertical-align: middle">"""
    html = html + """
    """+text+"""</a>

    """
    return html