# ========================================================================
# 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("SEARCH USERS API ENDPOINT")

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

class API_Request(API_BaseRequest):
    account_type: str = ""
    job_location: str = ""
    page: int = 0
    total_pages: int = 0
    results_per_page: int = 0

class API_Response(API_BaseResponse):
    count: int = 0
    results: str = ""

@router.post("/users/search_users")
def search_users(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

    # Perform the SQL request
    sql_connection.db_init()
    sql_connection.db_connect()

    # Get all users
    all_users = sql_connection.select('users')
    filtered_users = []

    # Check criteria against search
    for account_user in all_users:
        users_attributes = json.loads(account_user['attributes'])
        user_type = users_attributes.get('account_type')
        user_location = users_attributes.get('post_code')
        user_range = users_attributes.get('location_range')
        user_ok = True

        if(request.account_type != ""):
            if(user_type != request.account_type):
                user_ok = False

        if(request.job_location != ""):
            pass

        if(user_ok):
            user_details = {}
            user_details['username'] = account_user['username']
            user_details['avatar'] = users_attributes.get('avatar')
            user_details['account_type'] = user_type
            filtered_users.append(user_details)

    # Now filter results based on current page
    start_index = request.page * request.results_per_page
    end_index = start_index + request.results_per_page
    returned_results = filtered_users[start_index:end_index]

    api_response.success = True
    api_response.status_code = 200
    api_response.reason = ""
    api_response.count = len(returned_results)
    api_response.results = json.dumps(returned_results)
    return api_response
