import GeneralHeader from '@/components/general-header';
import { MediaManager } from '@/components/media/MediaManager';
import AppLayout from '@/layouts/app-layout';
import { MediaItem } from '@/types/global';
import { Head, router } from '@inertiajs/react';

declare const route: (...args: any[]) => string;

interface MediaIndexProps {
    data: {
        data: MediaItem[];
        links: any[];
        current_page: number;
        last_page: number;
        total: number;
    };
}

export default function Index({ data }: MediaIndexProps) {
    const handleSearch = (query: string) => {
        router.get(route('media.index'), { search: query }, { preserveState: true, preserveScroll: true });
    };

    const handleUpload = (files: File[]) => {
        console.log('handleUpload called with files:', files.length);

        if (files.length === 0) {
            alert('No files selected');
            return;
        }

        // Upload files one by one with proper error handling
        files.forEach((file, index) => {
            console.log(`Uploading file ${index + 1}/${files.length}:`, file.name, file.size, 'bytes');

            const formData = new FormData();
            formData.append('file', file);

            router.post(route('media.store'), formData, {
                preserveScroll: true,
                forceFormData: true,
                onSuccess: () => {
                    console.log(`File ${index + 1}/${files.length} uploaded successfully`);
                },
                onError: (errors) => {
                    console.error('Upload failed:', errors);
                    const errorMsg = errors.file ? errors.file : JSON.stringify(errors);
                    alert(`Failed to upload ${file.name}: ${errorMsg}`);
                },
            });
        });
    };

    const handleDelete = (id: number) => {
        if (confirm('Are you sure you want to delete this file?')) {
            router.delete(route('media.destroy', id), {
                preserveState: true,
                preserveScroll: true,
            });
        }
    };

    const handleUpdate = (item: MediaItem) => {
        // Inertia refresh handles data update
    };

    return (
        <AppLayout>
            <Head title="Media" />
            <div className="flex h-full flex-col bg-background">
                <GeneralHeader heading="Media" description="Manage your images and files stored in DigitalOcean Spaces." />

                <div className="flex-1 overflow-hidden p-4">
                    <MediaManager items={data.data} onSearch={handleSearch} onUpload={handleUpload} onDelete={handleDelete} onUpdate={handleUpdate} />
                </div>
            </div>
        </AppLayout>
    );
}
