import {instance, sleep} from "./axios";
import {
    AcceptInvitationParams,
    AddInvitationParams,
    CreateInvitationResponse,
    DPassSelectOptions,
    DeclineInvitationParams
} from "../models/DPass/NewInvitation";
import {GetMyInvitationParams} from "../models/DPass/MyInvitations";
import {Invitation} from "../models/DPass/Invitation";
import {RecordsResponse} from "../models/Axios";
import {Visit} from "../models/DPass/Visit";


export async function createInvitation(params: AddInvitationParams) {
    return instance.post<CreateInvitationResponse>("api/dpass/v1/invitation/add", params);
}

export async function sendInvitation(id: number) {
    return instance.post<CreateInvitationResponse>("api/dpass/v1/invitation/send-to-visitor", {invitation_id : id});
}

export async function cancelInvitation(id:any) {
    return instance.post("api/dpass/v1/invitation/cancel", {invitation_id : id});
}

export async function cancelVisit(id:any, actor:any) {
    return instance.post("api/dpass/v1/visit/cancel", {visit_id : id, actor:actor});
}

export async function cancelAllVisits(sig: string | null) {
    return instance.post("api/dpass/v1/visits/cancel", {signature : sig});
}

export async function createAndSendInvitation(params: AddInvitationParams) {
    return instance.post<CreateInvitationResponse>("api/dpass/v1/invitation/add-and-send", params);
}

export async function createEmergencyInvitation(params: AddInvitationParams) {
    return instance.post<CreateInvitationResponse>("api/dpass/v1/invitation/emergency/add", params);
}


/**
 * Returns the invitation's host data
 */

export async function getDPassInvitation(sig: string | null) {
    return instance.get<Invitation>("api/dpass/v1/link", {
        params: {signature: sig},
    });
}

/**
 * Returns the options we need to fill the select dropdowwn on DPassForm
 */
export async function getDPassFormSelectOptions() {
    return instance.get<DPassSelectOptions>("api/dpass/v1/lookupsData");
}

/**
 * Accepted by Visitor after following link to his email
 */
export async function acceptInvitation( sig: string | null, body: AcceptInvitationParams) {
    return instance.post<CreateInvitationResponse>("api/dpass/v1/invitation/accept",{
        signature: sig,
        ...body
    }
    );
}

/**
 * Denied by Visitor after following link to his email
 */
export async function declineInvitation(sig: string | null, body: DeclineInvitationParams, ) {
    return instance.post("api/dpass/v1/invitation/decline" ,{
        signature: sig,
        ...body
    });
}


export async function getMyInvitations(params: GetMyInvitationParams) {
    return instance.post<RecordsResponse<Invitation>>("api/dpass/v1/invitations", params);
}

export async function getInvitation(id: string) {
    return instance.get<{'invitation': Invitation}>("api/dpass/v1/invitation/"+id);
}


export interface GetVisitParams {
    date_from?: string
    date_to?: string
    visit_statuses: number[]
    search?: string
    page: number
    page_size: number
    host_email: string
}

export async function getVisits(params: GetVisitParams) {
    return instance.post<RecordsResponse<Visit>>("api/dpass/v1/visits", {
        ...params
    });
}

export async function getVisit(id : string) {
    return instance.get<{'visit' : Visit}>(`api/dpass/v1/visit/${id}`);
}

export async function getSameMassVisit(id : string) {
    return instance.get<any>(`api/dpass/v1/visit-same-mass/${id}`);
}
export async function getSameMassInvitation(id : string) {
    return instance.get<any>(`api/dpass/v1/invitation-same-mass/${id}`);
}

export async function getInvitationStatuses() {
    return instance.get("api/dpass/v1/invitation/statuses");
}

export async function getVisitStatuses() {
    return instance.get("api/dpass/v1/visit/statuses");
}


export async function getCalendarVisits(params:any) {
    return instance.post<RecordsResponse<Visit>>("api/dpass/v1/visits/calendar", params);
}




export async function checkInVisit(id:number) {
    return instance.post<{'visit' : Visit}>("api/dpass/v1/visit/check-in-out", {
        visit_id: id,
        direction: 'in'
    });
}

export async function checkOutVisit(id:number) {
    return instance.post<{'visit' : Visit}>("api/dpass/v1/visit/check-in-out", {
        visit_id: id,
        direction: 'out'
    });
}

export async function updateVisit(params:any) {
    return instance.post("api/dpass/v1/invitation/update", params);
}

export async function updateNote(id:number, note:string) {
    return instance.post("api/dpass/v1/invitation/update", {
        invitation_id:id,
        gate_note: note
    });
}

export async function updateVehicle(id:number, vehicle_plate:string) {
    return instance.post("api/dpass/v1/invitation/update", {
        invitation_id:id,
        vehicle_plate: vehicle_plate
    });
}

/**
 * Getting the pdf files needed for DPASS Invitations app views
 */

export async function getPdfs(locale:any) {
    return instance.get("api/pdfs",{
        params: { 
            locale:locale
        }
    });
}