import { Badge } from '@admin/components/ui/badge';
import { Button } from '@admin/components/ui/button';
import { Card, CardContent } from '@admin/components/ui/card';
import { Input } from '@admin/components/ui/input';
import StatisticCardLarge from '@admin/components/dashboard/StatisticCardLarge';
import AdminLayout from '@admin/layouts/admin/admin-layout';
import { Head, router } from '@inertiajs/react';
import { Building2, CheckCircle2, Layers, Palette, Search, Settings, TrendingUp, Users } from 'lucide-react';
import { ReactNode, useState } from 'react';

interface Theme {
    id: number;
    name: string;
    slug: string;
    description?: string;
    preview_image?: string;
    assigned_tenants_count: number;
    active_tenants_count: number;
}

interface ThemeCategory {
    category: {
        id: number;
        name: string;
        slug: string;
    };
    themes: Theme[];
}

interface Tenant {
    id: number;
    uid: string;
    company_name: string;
    slug: string;
    email: string;
    active_theme: {
        id: number;
        name: string;
        category: string;
    } | null;
    assigned_themes_count: number;
    themes: Array<{
        id: number;
        name: string;
        category: string;
        is_active: boolean;
        assigned_at: string;
    }>;
}

interface Statistics {
    total_tenants: number;
    total_themes: number;
    total_categories: number;
    total_assignments: number;
}

interface ThemeManagementProps {
    themeCategories: ThemeCategory[];
    tenants: Tenant[];
    statistics: Statistics;
}

export default function ThemeManagementIndex({ themeCategories, tenants, statistics }: ThemeManagementProps) {
    const [searchQuery, setSearchQuery] = useState('');
    const [selectedCategory, setSelectedCategory] = useState<string | 'all'>('all');
    const [activeTab, setActiveTab] = useState<'themes' | 'tenants'>('tenants');

    const filteredTenants = tenants.filter(
        (tenant) =>
            tenant.company_name.toLowerCase().includes(searchQuery.toLowerCase()) || tenant.email.toLowerCase().includes(searchQuery.toLowerCase()),
    );

    const filteredThemes = themeCategories
        .filter(({ category }) => selectedCategory === 'all' || category.slug === selectedCategory)
        .flatMap(({ themes }) => themes)
        .filter(
            (theme) =>
                theme.name.toLowerCase().includes(searchQuery.toLowerCase()) || theme.description?.toLowerCase().includes(searchQuery.toLowerCase()),
        );

    const handleManageTenant = (tenant: Tenant) => {
        router.visit(route('admin.themes.show', tenant.id));
    };

    const getThemePreviewImage = (theme: Theme) => {
        if (theme.preview_image) {
            return theme.preview_image;
        }
        const colors = ['6366f1', '22c55e', '3b82f6', '059669', 'f59e0b', '8b5cf6'];
        const colorIndex = theme.id % colors.length;
        return `https://placehold.co/400x300/${colors[colorIndex]}/ffffff?text=${encodeURIComponent(theme.name)}`;
    };

    return (
        <>
            <Head title="Theme Management" />
            <div className="no-scrollbar rounded-xl p-4">
                {/* Header */}
                <div className="mb-6 grid grid-cols-1 gap-1">
                    <h2 className="text-xl font-bold sm:text-2xl">Theme Management</h2>
                    <div className="flex items-center text-sm text-gray-600">
                        <span>Administration</span>
                        <span className="mx-2">›</span>
                        <span>Themes</span>
                    </div>
                </div>

                {/* Statistics Cards */}
                <div className="mb-6 grid grid-cols-2 gap-4 lg:grid-cols-4">
                    <StatisticCardLarge
                        title="Total Tenants"
                        value={statistics.total_tenants}
                        icon={Building2}
                        iconBg="bg-blue-100"
                        iconColor="text-blue-600"
                    />
                    <StatisticCardLarge
                        title="Total Themes"
                        value={statistics.total_themes}
                        icon={Palette}
                        iconBg="bg-purple-100"
                        iconColor="text-purple-600"
                    />
                    <StatisticCardLarge
                        title="Categories"
                        value={statistics.total_categories}
                        icon={Layers}
                        iconBg="bg-green-100"
                        iconColor="text-green-600"
                    />
                    <StatisticCardLarge
                        title="Assignments"
                        value={statistics.total_assignments}
                        icon={TrendingUp}
                        iconBg="bg-orange-100"
                        iconColor="text-orange-600"
                    />
                </div>

                {/* Tab Navigation */}
                <div className="mb-6 flex gap-2">
                    <Button variant={activeTab === 'tenants' ? 'default' : 'outline'} onClick={() => setActiveTab('tenants')}>
                        <Building2 className="mr-2 h-4 w-4" />
                        Tenants ({tenants.length})
                    </Button>
                    <Button variant={activeTab === 'themes' ? 'default' : 'outline'} onClick={() => setActiveTab('themes')}>
                        <Palette className="mr-2 h-4 w-4" />
                        Themes ({themeCategories.reduce((acc, cat) => acc + cat.themes.length, 0)})
                    </Button>
                </div>

                {/* Search */}
                <Card className="mb-6">
                    <CardContent className="p-4">
                        <div className="relative max-w-md">
                            <Search className="absolute top-1/2 left-3 h-4 w-4 -translate-y-1/2 transform text-gray-400" />
                            <Input
                                type="text"
                                placeholder={activeTab === 'tenants' ? 'Search tenants...' : 'Search themes...'}
                                value={searchQuery}
                                onChange={(e) => setSearchQuery(e.target.value)}
                                className="pl-10"
                            />
                        </div>
                    </CardContent>
                </Card>

                {/* Tenants Tab */}
                {activeTab === 'tenants' && (
                    <div className="space-y-4">
                        {filteredTenants.map((tenant) => (
                            <Card key={tenant.id} className="transition-shadow hover:shadow-md">
                                <CardContent className="p-4">
                                    <div className="flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
                                        <div className="flex items-start gap-4">
                                            <div className="flex h-12 w-12 items-center justify-center rounded-lg bg-blue-100">
                                                <Building2 className="h-6 w-6 text-blue-600" />
                                            </div>
                                            <div>
                                                <h3 className="text-lg font-semibold">{tenant.company_name}</h3>
                                                <p className="text-sm text-gray-500">{tenant.email}</p>
                                                <div className="mt-2 flex flex-wrap items-center gap-2">
                                                    <Badge variant="secondary">{tenant.assigned_themes_count} themes assigned</Badge>
                                                    {tenant.active_theme && (
                                                        <Badge className="bg-green-100 text-green-700">
                                                            <CheckCircle2 className="mr-1 h-3 w-3" />
                                                            Active: {tenant.active_theme.name}
                                                        </Badge>
                                                    )}
                                                </div>
                                            </div>
                                        </div>
                                        <div className="flex gap-2">
                                            <Button variant="outline" size="sm" onClick={() => handleManageTenant(tenant)}>
                                                <Settings className="mr-2 h-4 w-4" />
                                                Manage Themes
                                            </Button>
                                        </div>
                                    </div>

                                    {/* Show assigned themes */}
                                    {tenant.themes.length > 0 && (
                                        <div className="mt-4 border-t pt-4">
                                            <p className="mb-2 text-sm font-medium text-gray-600">Assigned Themes:</p>
                                            <div className="flex flex-wrap gap-2">
                                                {tenant.themes.map((theme) => (
                                                    <Badge
                                                        key={theme.id}
                                                        variant={theme.is_active ? 'default' : 'secondary'}
                                                        className={theme.is_active ? 'bg-green-600' : ''}
                                                    >
                                                        {theme.name}
                                                        {theme.is_active && ' (Active)'}
                                                    </Badge>
                                                ))}
                                            </div>
                                        </div>
                                    )}
                                </CardContent>
                            </Card>
                        ))}

                        {filteredTenants.length === 0 && (
                            <Card>
                                <CardContent className="py-12 text-center">
                                    <Building2 className="mx-auto mb-4 h-12 w-12 text-gray-300" />
                                    <h3 className="text-lg font-medium text-gray-900">No tenants found</h3>
                                    <p className="text-gray-500">{searchQuery ? 'Try adjusting your search query' : 'No tenants available'}</p>
                                </CardContent>
                            </Card>
                        )}
                    </div>
                )}

                {/* Themes Tab */}
                {activeTab === 'themes' && (
                    <div className="space-y-6">
                        {/* Category Filter */}
                        <div className="flex flex-wrap gap-2">
                            <Button variant={selectedCategory === 'all' ? 'default' : 'outline'} size="sm" onClick={() => setSelectedCategory('all')}>
                                All Categories
                            </Button>
                            {themeCategories.map(({ category }) => (
                                <Button
                                    key={category.id}
                                    variant={selectedCategory === category.slug ? 'default' : 'outline'}
                                    size="sm"
                                    onClick={() => setSelectedCategory(category.slug)}
                                >
                                    {category.name}
                                </Button>
                            ))}
                        </div>

                        {/* Themes Grid */}
                        <div className="grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4">
                            {filteredThemes.map((theme) => (
                                <Card key={theme.id} className="overflow-hidden transition-shadow hover:shadow-lg">
                                    <div className="relative aspect-video bg-gray-100">
                                        <img src={getThemePreviewImage(theme)} alt={theme.name} className="h-full w-full object-cover" />
                                    </div>
                                    <CardContent className="p-4">
                                        <h3 className="font-semibold">{theme.name}</h3>
                                        {theme.description && <p className="mt-1 line-clamp-2 text-sm text-gray-500">{theme.description}</p>}
                                        <div className="mt-3 flex items-center gap-4 text-sm text-gray-600">
                                            <span className="flex items-center gap-1">
                                                <Users className="h-4 w-4" />
                                                {theme.assigned_tenants_count} assigned
                                            </span>
                                            <span className="flex items-center gap-1">
                                                <CheckCircle2 className="h-4 w-4 text-green-500" />
                                                {theme.active_tenants_count} active
                                            </span>
                                        </div>
                                    </CardContent>
                                </Card>
                            ))}
                        </div>

                        {filteredThemes.length === 0 && (
                            <Card>
                                <CardContent className="py-12 text-center">
                                    <Palette className="mx-auto mb-4 h-12 w-12 text-gray-300" />
                                    <h3 className="text-lg font-medium text-gray-900">No themes found</h3>
                                    <p className="text-gray-500">{searchQuery ? 'Try adjusting your search query' : 'No themes available'}</p>
                                </CardContent>
                            </Card>
                        )}
                    </div>
                )}
            </div>
        </>
    );
}

ThemeManagementIndex.layout = (page: ReactNode) => (
    <AdminLayout
        breadcrumbs={[
            { title: 'Home', href: '/' },
            { title: 'Theme Management', href: route('admin.themes.index') },
        ]}
    >
        {page}
    </AdminLayout>
);
