import {
	type IorangePaymentStarter,
	getTransactionStatus,
	getTransactionsData,
} from "@/utils/requests/orangePayment";

import { useMutation } from "@tanstack/react-query";
import * as WebBrowser from "expo-web-browser";
import { useState } from "react";

const paymentObjectDefault: IorangePaymentStarter = {
	// biome-ignore lint/style/useNamingConvention: <api expect type_paiement>
	type_paiement: 1,
	marchand: "1",
	service: "1",
	montant: 0,
	numero: "0707070707",
	commentaire: "Un commentaire",
};
const useOrangeMoney = () => {
	const [isBrowserOpen, setIsBrowserOpen] = useState(false);

	const handlePaymentUsingBrowser = async (url: string) => {
		setIsBrowserOpen(true);
		const result = await WebBrowser.openBrowserAsync(url);
		// setResult(result);
		console.log("result", result);
		setIsBrowserOpen(false);
	};

	const orangeTransactionInitializerMutation = useMutation({
		mutationFn: (amount: number) =>
			getTransactionsData({
				...paymentObjectDefault,
				montant: amount,
			}),
		onSuccess: async (data) => {
			// return data.payment_url
			console.log("om start success ", data);
			await handlePaymentUsingBrowser(data.payment_url);
			// await transactionsStatusMutation.mutate(data.order_id);
			// setResult(result);
		},
		onError: (err) => {
			console.log("om start error ", err);
		},
	});

	const maxRetry = 3;
	const retryDelay = 5000;

	const transactionsStatusMutation = useMutation({
		mutationFn: (orderId: string) => getTransactionStatus(orderId),
		onSuccess: (data) => {
			console.log("useOrangeMoney Check status :: ", data);
			return data.status;
		},
		onError: (err) => {
			console.log("useOrangeMoney Error ::", err);
		},
		retry: (failureCount, error) => {
			return failureCount < maxRetry;
		},
		retryDelay(failureCount, error) {
			console.log("failureCount", failureCount, "error", error);
			return retryDelay;
		},
	});

	return {
		orangeTransactionInitializerMutation: orangeTransactionInitializerMutation,

		handlePaymentUsingBrowser,
		isBrowserOpen,
		isWaitingForOmPaymentUrl: orangeTransactionInitializerMutation.isPending,
		isCheckingForTransactionStatus: transactionsStatusMutation.isPending,
		transactionsStatusMutation,
	};
};

export default useOrangeMoney;
