# ========================================================================
# User ID API Endpoint
#

from fastapi import APIRouter
from api.core.EasyMessage import API_BaseRequest
from api.core.EasyMessage import API_BaseResponse
from api.core.EasySQL import EasySQL
from api.core.EasyUser import EasyUser

import json

print("SET PROFILE DETAILS API ENDPOINT")

router = APIRouter()
sql_connection = EasySQL()
user = EasyUser()

class API_Request(API_BaseRequest):
    fname: str = ""
    lname: str = ""
    email: str = ""
    post_code: str = ""
    account_type: str = ""
    company_name: str = ""
    company_location: str = ""
    employers_insurance: str = ""
    school_name: str = ""
    school_location: str = ""
    driving_license: str = ""

class API_Response(API_BaseResponse):
    pass


@router.post("/users/set_profile_details")
def update_details(request: API_Request):

    # Default Session Check
    api_response = API_Response()
    session_hash = request.session_hash
    username = user.authenticate_session(session_hash)

    if(username == False):
        api_response.success = False
        api_response.status_code = 403
        api_response.reason = "Login Failure"
        return api_response

    user_attributes = user.get_attributes(username)

    if(request.fname != ""):
        user_attributes['fname'] = request.fname

    if(request.lname != ""):
        user_attributes['lname'] = request.lname

    if(request.email != ""):
        user_attributes['email'] = request.email

    if(request.post_code != ""):
        user_attributes['post_code'] = request.post_code

    if(request.account_type != ""):
        match request.account_type:
            case 'student':
                user_attributes['account_type'] = "student"
            case 'tradesman':
                user_attributes['account_type'] = "tradesman"
            case _:
                user_attributes['account_type'] = "tradesman"

    if request.company_name:
        user_attributes['company_name'] = request.company_name

    if request.company_location:
        user_attributes['company_location'] = request.company_location

    if request.employers_insurance:
        user_attributes['employers_insurance'] = request.employers_insurance

    if request.school_name:
        user_attributes['school_name'] = request.school_name

    if request.school_location:
        user_attributes['school_location'] = request.school_location

    if request.driving_license:
        user_attributes['driving_license'] = request.driving_license

    if(user.set_attributes(username, user_attributes) == False):
        api_response.success = False
        api_response.status_code = 500
        api_response.reason = "Internal Server Error"
        return api_response

    api_response.success = True
    api_response.status_code = 200
    api_response.reason = ""
    return api_response
