import json
import sys
import mysql.connector

sys.path.insert(0, "./include")
from fastapi import FastAPI
from fastapi.encoders import jsonable_encoder
from fastapi.responses import JSONResponse
from config import connect

from fastapi.openapi.docs import get_swagger_ui_html
from fastapi.openapi.utils import get_openapi

import secrets

from fastapi import Depends, HTTPException, status
from fastapi.security import HTTPBasic, HTTPBasicCredentials

app = FastAPI(docs_url=None, redoc_url=None, openapi_url = None)
#app=FastAPI(title="FastAPI",version="0.1.0")
security = HTTPBasic()


def get_current_username(credentials: HTTPBasicCredentials = Depends(security)):
    correct_username = secrets.compare_digest(credentials.username, "user")
    correct_password = secrets.compare_digest(credentials.password, "password")
    if not (correct_username and correct_password):
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="Incorrect email or password",
            headers={"WWW-Authenticate": "Basic"},
        )
    return credentials.username


@app.get("/docs")
async def get_documentation(username: str = Depends(get_current_username)):
    return get_swagger_ui_html(openapi_url="/openapi.json", title="docs")


@app.get("/openapi.json")
async def openapi(username: str = Depends(get_current_username)):
    return get_openapi(title = "Flag api", version="0.1.0", routes=app.routes)






class create_dict(dict):
    # __init__ function


    def __init__(self):
        self = dict()
    # Function to add key:value
    def add(self, key, value):
        self[key] = value

@app.get("/list_box")
async def read_item():
	conn = connect()
	cursor = conn.cursor()
	query = "SELECT id,mat FROM flag.flag;"
	cursor.execute(query)
	columns = [column[0] for column in cursor.description]
	data = [dict(zip(columns, row)) for row  in cursor.fetchall()]
	#result =cursor.fetchall()
	conn.close()
	return  JSONResponse(content=data, media_type="application/json")
#return json.loads(data)

@app.get("/lock_box_space")
async def read_item(mat: str, company: str,date: str, fascia: str,nr:str):
	conn = connect()
	cursor = conn.cursor()
	query = "SELECT flag.lock_box_space('240404', 'ONE', '240131', '0', '2')as id;"
	cursor.execute(query)
	columns = [column[0] for column in cursor.description]
	data = [dict(zip(columns, row)) for row  in cursor.fetchall()]
	conn.commit()
	#result =cursor.fetchall()
	conn.close()
	return  JSONResponse(content=data, media_type="application/json")
