import { Button } from '@/components/ui/button';
import {
    DropdownMenu,
    DropdownMenuContent,
    DropdownMenuGroup,
    DropdownMenuItem,
    DropdownMenuTrigger,
} from '@/components/ui/dropdown-menu';
import { IconCloudDownload, IconFileTypeXls } from '@tabler/icons-react';

import { show_toast } from '@/helper_files/toast';
import { format } from 'date-fns';
import { exportCallerReportFlattenXlsx } from './exportCallerReportFlattenXlsx';
import { exportCallerReportXlsx } from './exportCallerReportXlsx';

function CallerFileExport({
    getDataForExport,
    fileName = 'Caller-Report',
    hidden = false,
    loading,
}) {
    const updatedFilename = `${fileName}-${format(new Date(), 'ddMMyyyyhhmmss')}`;

    return (
        <DropdownMenu>
            <DropdownMenuTrigger asChild className={hidden ? 'hidden' : ''}>
                <Button
                    variant="secondary"
                    disabled={loading}
                    className="gap-2">
                    <IconCloudDownload size={20} className="text-base-400" />
                    <span className="md:flex hidden">Export</span>
                </Button>
            </DropdownMenuTrigger>
            <DropdownMenuContent align="start" className="w-full">
                <DropdownMenuGroup>
                    <DropdownMenuItem
                        onClick={async () => {
                            try {
                                const data = await getDataForExport();

                                if (data) {
                                    exportCallerReportXlsx(
                                        data,
                                        updatedFilename,
                                    );
                                    show_toast(
                                        'success',
                                        'File Exported Successfully',
                                    );
                                } else {
                                    show_toast('error', 'File Export Failed');
                                }
                            } catch (error) {
                                show_toast('error', 'File Export Failed');
                            }
                        }}
                        className="flex cursor-pointer items-center gap-1 text-base-400">
                        <IconFileTypeXls className="text-base-400" size={18} />
                        <span>Xlsx</span>
                    </DropdownMenuItem>
                    <DropdownMenuItem
                        onClick={async () => {
                            try {
                                const data = await getDataForExport();

                                if (data) {
                                    exportCallerReportFlattenXlsx(
                                        data,
                                        updatedFilename,
                                    );
                                    show_toast(
                                        'success',
                                        'File Exported Successfully',
                                    );
                                } else {
                                    show_toast('error', 'File Export Failed');
                                }
                            } catch (error) {
                                show_toast('error', 'File Export Failed');
                            }
                        }}
                        className="flex cursor-pointer items-center gap-1 text-base-400">
                        <IconFileTypeXls className="text-base-400" size={18} />
                        <span>Xlsx Flatten</span>
                    </DropdownMenuItem>
                </DropdownMenuGroup>
            </DropdownMenuContent>
        </DropdownMenu>
    );
}

export default CallerFileExport;
