import { Donation } from '@givewp/donations/admin/components/types';
import { ApexOptions } from 'apexcharts';
import { getCompletedDonations } from '../SubscriptionStats';

/**
 * Get completed donations for the current year
 *
 * @since 4.8.0
 */
export const getCurrentYearCompletedDonations = (donations: Donation[]): Donation[] => {
    const completedDonations = getCompletedDonations(donations);
    const currentYear = new Date().getFullYear();

    return completedDonations?.filter(donation => {
        const donationDate = new Date(donation.createdAt);
        return donationDate.getFullYear() === currentYear;
    });
};

/**
 * Calculate total contributions from completed donations
 *
 * @since 4.8.0
 */
export const calculateTotalContributions = (completedDonations: Donation[]): number => {
    if (!completedDonations) {
        return 0;
    }

    return completedDonations?.reduce((acc, donation) => acc + Number(donation.amount.value), 0);
};

/**
 * Calculate progress percentage based on completed vs projected amounts
 *
 * @since 4.8.0
 */
export const calculateProgressPercentage = (completedAmount: number, projectedAmount: number): number => {
    const progress = Math.ceil((completedAmount / projectedAmount) * 100);

    return Math.min(progress, 100);
};

/**
 * @since 4.8.0
 */
export const chartOptions = (label: string): ApexOptions => {
    return {
        chart: {
            height: 1024,
            type: 'radialBar',
        },
        plotOptions: {
            radialBar: {
                hollow: {
                    margin: 15,
                    size: '60%',
                },
                dataLabels: {
                    /**
                     * The "name" is the top label, here it is the value/amount
                     * The "value" is the percent progress
                     */
                    name: {
                        offsetY: 20,
                        show: true,
                        color: '#4B5563',
                        fontSize: '12px',
                    },
                    value: {
                        offsetY: -20,
                        color: '#060C1A',
                        fontSize: '24px',
                        show: true,
                    },
                },
            },
        },
        colors: ['#459948'],
        labels: [label],
    };
};
