import axios from "axios";
import { getStoredLocale } from "../getLocale";


export async function indexAccounts(token: string, {
    page, limit = 10 }: { page: number; limit?: number }
): Promise<any> {
    try {
        const locale = getStoredLocale();

        const url = `${process.env.NEXT_PUBLIC_API_URL}/banks?page=${page}&limit=${limit}`;

        const headers: Record<string, string> = {
            "Content-Type": "application/json",
            "Accept-Language": locale,
            Authorization: "Bearer " + token,
        };

        const res = await axios.get(url, { headers });
        const result = res?.data?.data?.data;

        return {
            success: true,
            message: "Bank Fetch Successfully!",
            data: result,
            pagination: res?.data?.data?.pagination
        };
    } catch (error: any) {
        throw error;
    }
}

export async function createAccount(token: string, payload: any): Promise<any> {
    try {
        const locale = getStoredLocale();

        const url = `${process.env.NEXT_PUBLIC_API_URL}/bank/store`;

        const headers: Record<string, string> = {
            "Content-Type": "application/json",
            "Accept-Language": locale,
            Authorization: "Bearer " + token,
        };

        const res = await axios.post(url, payload, { headers });
        const result = res?.data?.data?.data;

        return {
            success: true,
            message: "Bank Added Successfully!",
            data: result,
        };
    } catch (error: any) {
        throw error;
    }
}

export async function updateAccount(token: string, {
    accountId,
    payload
}: { accountId: string; payload: any }): Promise<any> {
    try {
        const locale = getStoredLocale();

        const url = `${process.env.NEXT_PUBLIC_API_URL}/bank/${accountId}/update`;

        const headers: Record<string, string> = {
            "Content-Type": "application/json",
            "Accept-Language": locale,
            Authorization: "Bearer " + token,
        };

        const res = await axios.post(url, payload, { headers });
        const result = res?.data?.data?.data;

        return {
            success: true,
            message: "Bank Updated Successfully!",
            data: result,
        };
    } catch (error: any) {
        throw error;
    }
}

export async function setPrimaryAccount(token: string, {
    accountId
}: { accountId: string }): Promise<any> {
    try {
        const locale = getStoredLocale();

        const url = `${process.env.NEXT_PUBLIC_API_URL}/bank/${accountId}/set-primary`;

        const headers: Record<string, string> = {
            "Content-Type": "application/json",
            "Accept-Language": locale,
            Authorization: "Bearer " + token,
        };

        const res = await axios.get(url, { headers });
        const result = res?.data;

        return {
            success: true,
            message: "Bank Deleted Successfully!",
            data: result,
        };
    } catch (error: any) {
        throw error;
    }
}

export async function deleteAccount(token: string, {
    accountId
}: { accountId: string }): Promise<any> {
    try {
        const locale = getStoredLocale();

        const url = `${process.env.NEXT_PUBLIC_API_URL}/bank/${accountId}/delete`;

        const headers: Record<string, string> = {
            "Content-Type": "application/json",
            "Accept-Language": locale,
            Authorization: "Bearer " + token,
        };

        const res = await axios.delete(url, { headers });
        const result = res?.data;

        return {
            success: true,
            message: "Bank Deleted Successfully!",
            data: result,
        };
    } catch (error: any) {
        throw error;
    }
}