/* eslint-disable @typescript-eslint/no-unused-vars */
import {EgovUser, Microservice, PreLoginSettingsRes, Role} from "../models/EgovUser";
import Groups from "../models/Riview/Groups";
import Unit from '../models/Unit'
import Institute from "../models/Riview/Institute";
import {EmergencyPassword} from "../models/Settings/EmergencyPassword";
import {instance} from "./axios";
import dayjs from "dayjs";
import { MobilePhone } from "../models/Settings/MobilePhone";

interface LoginData {
    message: string;
    user: EgovUser;
    translations: any;
    settings: {
        disable_login: {
            message: string
            status: 0 | 1
        }
    }
}

interface LoginCredentials {
    email: string;
    password: string;
}

interface Ldapemail {
    email: string;
}

export function CSRFToken() {
    return instance.get("sanctum/csrf-cookie", {
        withCache: false
    });
}

export async function login(credentials: LoginCredentials) {
    return instance.post<LoginData>("api/login", credentials);
}

export function logout() {
    return instance.post<any>("api/logout");
}

export function ldapexist(credentials: Ldapemail) {
    return instance.post("api/exists-in-catalog", credentials);
}

export function checkAuth() {
    return instance.get("api/session", {
        withCache: false,
        validateStatus: (status) => status === 200 || status === 401,
    });
}

export function updateQuickAccess(newQuickAccess: string[]) {
    return instance.post("api/save-quick-access", {
        'quickAccess': newQuickAccess
    });
}

export function updatePersonalNote(text: string) {
    return instance.post("api/personal-note/save", {
        'text': text
    });
}

export function getPersonalNote() {
    return instance.get("api/personal-note", {
        withCache: false
    });
}

export function getPreLoginSettings() {
    return instance.get<PreLoginSettingsRes>("api/settings", {
        withCache: false
    });
}

export function getNotifications() {
    return instance.get("api/unread-notifications");
}

/**
 * returns units attached to users
 */
export function getUnits() {
    return instance.get<Unit[]>("api/user-unit-list");
}

/**
 * returns units attached to user for that role
 */
export function getUnitForRole(role: Role) {
    return instance.get<Unit[]>(`api/user-role-unit-list/${role}`);
}

export function getGroups(role: Role) {
    return instance.get<Groups>(`api/user-research-group-list/${role}`)
}

/**
 * gets user intsitues,
 * parameter = miscroservise so it returns only the availables ??
 */
export function getInstitutes(ms: Microservice, role: Role) {
    return instance.get<Institute[]>('api/user-institute-list', {
        params: {
            microservice: ms,
            role: role
        }
    })
}

export function getEvaluations() {
    return instance.get('api/riview/v1/evaluation-period?type=all')
}

export function uploadImage(formData: any) {
    return instance.post('api/upload/profile/picture', formData, {
        headers: {
            "Content-Type": "multipart/form-data",
        },
    })
}

export function getProfilePicture() {
    return instance.get('api/show/profile/picture',
        {
            responseType: 'blob',
            params: {
                timestamp: dayjs()
            },
            headers: {
                'Cache-Control': 'no-cache',
                'Pragma': 'no-cache',
                'Expires': '0',
            },
        }
    )
}

export async function getSecondaryCode(body: EmergencyPassword) {
    return instance.post("api/set/secondary/password", {...body});
}

export async function getMobilePhone(body: MobilePhone) {
    return instance.post("api/mobile-phone/update", {...body});
}

export function getModuleRules(role: string, module: string) {
    return instance.get('api/module/rules', {
        params: {
            role: role,
            module: module
        }
    })
}

export function getOnBehalf(ms: Microservice) {
    return instance.get(`api/on-behalf/${ms}`)
}

export function getBeamId() {
    return instance.get(`api/pusher/beams-auth`)
}

/***
 * EXTRA AUTH
 */
export function checkExtraAuth() {
    return instance.get(`api/secret/data`)
}



export function askExtraAuthCode(code_type_id:number) {
    // code type id refers to otp.
    return instance.post(`api/generate/verification/code`,{
        verification_code_type_id:code_type_id
    })
}

export function accessExtraAuth(code:string) {
    return instance.post(`api/confirm/verification/code`,{
        code_value: code
    })
}


/***
 * EXTRA AUTH
 */
// export function checkExtraAuth() {
//     return instance.get(`api/secret/data`)
// }
//
//
// export function generateExtraAuthCode() {
//     return instance.post(`api/generate/verification/code`)
// }
//
// export function accessExtraAuth(code:string) {
//     return instance.post(`api/confirm/verification/code`,{
//         code_value: code
//     })
// }


