import {instance} from "./axios";
import {AccountRequest, GetAccountRequestsParams} from "../models/NetSupport/AccountRequest";
import {RecordsResponse} from "../models/Axios";
import {EmailAccount, GetEmailAccountsParams} from "../models/NetSupport/EmailAccount";

/**
 * Email Accounts
 */
export async function getEmailAccountTypes() {
    return instance.get("api/network/manager/get/email/account/types");
}


export async function getEmailAccounts(requestParams:GetEmailAccountsParams) {
    return instance.get<RecordsResponse<EmailAccount>>("api/network/manager/get/all/email/accounts",{
        params:requestParams
    });
}

export async function getSingleEmailAccount(id: any) {
    return instance.get<EmailAccount>("api/network/manager/get/email/account",{
        params:{
            id: id
        }
    });
}


/**
 * Account Requests Endpoints
 */
export async function getAccountRequests(requestParams:GetAccountRequestsParams) {
    return instance.get<RecordsResponse<AccountRequest>>("api/network/manager/get/all/account/request", {
        params:requestParams
    });
}

export async function getAccountRequestsSingle(id:string) {
    return instance.get<{data:AccountRequest}>("api/network/manager/get/account/request", {
        params: {
            id:id
        }
    });
}

export async function getAccountRequestsStatuses() {
    return instance.get("api/network/manager/get/account/request/statuses");
}

export async function getAccountRequestsTypes() {
    return instance.get("api/network/manager/get/account/request/types");
}

export async function sendEmergencyEmailCreationRequest(formData:any) {
    return instance.post("api/network/manager/create/emergency/account/request",formData);
}

export async function editAccountRequestUsername(id:number, username:string) {
    return instance.post("api/network/manager/update/account/request", {
        id:id,
        username:username
    });
}

export async function resendPendingEmail(id:number) {
    return instance.post("/api/network/manager/emergency/account/re/send/email", {
        id:id,
    });
}


/**
 * Status changing
 */
export async function cancelPendingRequest(id:number) {
    return instance.post("api/network/manager/get/account/request/update/status/declined", {
        id:id,
    });
}

export async function markAccountRequestAsError(id:number) {
    return instance.post("api/network/manager/get/account/request/update/status/in/error", {
        id:id,
    });
}

export async function resolveAccountRequest(id:number, password?: string ) {
    return instance.post("api/network/manager/get/account/request/update/status/completed", {
        id:id,
        password: password
    });
}

