import React, { useEffect, useState } from 'react';
import { Head } from '@inertiajs/react';
import AdminLayout from '@admin/layouts/admin/admin-layout';
import { Card, CardContent, CardHeader, CardTitle } from '@admin/components/ui/card';
import { Alert, AlertDescription } from '@admin/components/ui/alert';
import { Badge } from '@admin/components/ui/badge';
import { Button } from '@admin/components/ui/button';
import { KPICard } from '@admin/components/admin/KPICard';
import { RevenueChart } from '@admin/components/admin/RevenueChart';
import { TenantHealthCard } from '@admin/components/admin/TenantHealthCard';
import { ModuleUsageCard } from '@admin/components/admin/ModuleUsageCard';
import {
  Building2,
  Users,
  Package,
  Activity,
  AlertTriangle,
  CheckCircle,
  Plus,
  ArrowRight,
  DollarSign,
  TrendingDown,
  Server,
  Database,
  Zap,
} from 'lucide-react';

interface DashboardStats {
  total_tenants: number;
  active_tenants: number;
  inactive_tenants: number;
  total_packages: number;
  active_packages: number;
  pending_jobs: number;
  failed_jobs: number;
  system_health: {
    database: string;
    cache: string;
    queue: string;
  };
}

interface DashboardSummaryItem {
  title: string;
  value: string | number;
  change?: number;
  trend?: 'up' | 'down';
  subtitle?: string;
}

interface RevenueDataPoint {
  month: string;
  revenue: number;
}

interface ModuleUsage {
  name: string;
  tenants: number;
  percentage: number;
}

interface TenantHealthData {
  healthy: number;
  warning: number;
  critical: number;
  total: number;
}

interface RecentActivity {
  id: number;
  name: string;
  domain: string;
  package?: string;
  created_at?: string;
  churned_at?: string;
}

interface SystemHealthDetails {
  checks: {
    database: string;
    cache: string;
    queue: string;
  };
  score: number;
  status: string;
  status_text: string;
  uptime: string;
}

interface Props {
  readonly stats: DashboardStats & {
    revenue_data: RevenueDataPoint[];
    tenant_health: TenantHealthData;
    module_usage: ModuleUsage[];
    system_health: SystemHealthDetails;
    recent_signups: RecentActivity[];
    recent_churns: RecentActivity[];
  };
  readonly dashboardSummary: DashboardSummaryItem[];
  readonly error?: string;
}

export default function Index({ stats, dashboardSummary, error }: Props) {
  const [maxColumns, setMaxColumns] = useState(6);

  useEffect(() => {
    const updateColumns = () => {
      const width = window.innerWidth;
      if (width < 640) setMaxColumns(1);
      else if (width < 768) setMaxColumns(2);
      else if (width < 1024) setMaxColumns(3);
      else if (width < 1280) setMaxColumns(4);
      else if (width < 1536) setMaxColumns(5);
      else setMaxColumns(6);
    };

    updateColumns();
    window.addEventListener('resize', updateColumns);
    return () => window.removeEventListener('resize', updateColumns);
  }, []);

  const getHealthBadge = (status: string) => {
    const config = {
      healthy: { variant: 'default' as const, icon: CheckCircle, text: 'Healthy' },
      warning: { variant: 'secondary' as const, icon: AlertTriangle, text: 'Warning' },
      error: { variant: 'destructive' as const, icon: AlertTriangle, text: 'Error' },
    };

    const { variant, icon: Icon, text } = config[status as keyof typeof config] || config.error;

    return (
      <Badge variant={variant} className="flex items-center gap-1">
        <Icon className="h-3 w-3" />
        {text}
      </Badge>
    );
  };

  return (
    <AdminLayout breadcrumbs={[{ title: 'Dashboard', href: '/admin/dashboard' }]}>
      <Head title="Dashboard - Admin Panel" />
      
      <div className="no-scrollbar rounded-xl p-4">
        <div className="space-y-6">
          {/* Header Section */}
          <div className="mb-6 flex flex-col items-start justify-between gap-4 sm:flex-row sm:items-center">
            <div className="grid grid-cols-1 gap-1">
              <h2 className="text-xl font-bold sm:text-2xl">Admin Dashboard</h2>
              <div className="flex items-center text-sm text-gray-600">
                <span>Administration</span>
                <span className="mx-2">›</span>
                <span>Dashboard</span>
              </div>
            </div>
            <div className="flex flex-wrap gap-2 sm:gap-4">
              <Button 
                className="bg-success text-white hover:bg-brand-800" 
                size="sm" 
                onClick={() => globalThis.location.href = '/admin/tenants/create'}
              >
                <div className="flex items-center gap-2">
                  <Plus className="size-4" />
                  <span className="hidden sm:inline">Create Tenant</span>
                </div>
              </Button>
            </div>
          </div>

          {error && (
            <Alert variant="destructive">
              <AlertTriangle className="h-4 w-4" />
              <AlertDescription>{error}</AlertDescription>
            </Alert>
          )}

          {/* KPI Metrics Row */}
          {dashboardSummary && dashboardSummary.length > 0 && (
            <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-6 gap-4 mb-6">
              {dashboardSummary.map((kpi, idx) => {
                const icons = [DollarSign, Building2, Users, TrendingDown, Package, Activity];
                const colors = [
                  { icon: 'text-green-600', bg: 'bg-green-100' },
                  { icon: 'text-blue-600', bg: 'bg-blue-100' },
                  { icon: 'text-purple-600', bg: 'bg-purple-100' },
                  { icon: 'text-red-600', bg: 'bg-red-100' },
                  { icon: 'text-emerald-600', bg: 'bg-emerald-100' },
                  { icon: 'text-amber-600', bg: 'bg-amber-100' },
                ];
                return (
                  <KPICard
                    key={idx}
                    title={kpi.title}
                    value={kpi.value}
                    change={kpi.change}
                    trend={kpi.trend}
                    subtitle={kpi.subtitle}
                    icon={icons[idx]}
                    iconColor={colors[idx].icon}
                    iconBg={colors[idx].bg}
                  />
                );
              })}
            </div>
          )}

          {/* Revenue Chart & Tenant Health */}
          <div className="grid grid-cols-1 lg:grid-cols-3 gap-6 mb-6">
            <RevenueChart data={stats.revenue_data} />
            <TenantHealthCard data={stats.tenant_health} />
          </div>

          {/* Recent Activity & Module Usage */}
          <div className="grid grid-cols-1 lg:grid-cols-2 gap-6 mb-6">
            {/* Recent Tenant Activity */}
            <Card className="border-0 shadow-sm hover:shadow-md transition-shadow">
              <CardHeader className="pb-4">
                <div className="flex items-center justify-between">
                  <div>
                    <CardTitle className="text-xl font-bold">Recent Signups</CardTitle>
                    <p className="text-sm text-gray-500 mt-1">New tenants in the last 7 days</p>
                  </div>
                  <Button 
                    variant="ghost" 
                    size="sm"
                    onClick={() => globalThis.location.href = '/admin/tenants'}
                  >
                    View All →
                  </Button>
                </div>
              </CardHeader>
              <CardContent>
                <div className="space-y-3">
                  {stats.recent_signups && stats.recent_signups.length > 0 ? (
                    stats.recent_signups.map((tenant, idx) => (
                      <div
                        key={idx}
                        className="flex items-center justify-between p-4 rounded-lg border hover:bg-gray-50 transition-colors cursor-pointer"
                        onClick={() => globalThis.location.href = `/admin/tenants/${tenant.id}`}
                      >
                        <div className="flex items-center gap-3">
                          <div className="p-2 bg-blue-100 rounded-lg">
                            <Building2 className="h-4 w-4 text-blue-600" />
                          </div>
                          <div>
                            <p className="font-medium text-gray-900">{tenant.name}</p>
                            <p className="text-xs text-gray-500">{tenant.domain}</p>
                          </div>
                        </div>
                        <div className="text-right">
                          <Badge variant="outline">{tenant.package}</Badge>
                          <p className="text-xs text-gray-500 mt-1">{tenant.created_at}</p>
                        </div>
                      </div>
                    ))
                  ) : (
                    <p className="text-center text-gray-500 py-8">No recent signups</p>
                  )}
                </div>
              </CardContent>
            </Card>

            {/* Module Usage */}
            <ModuleUsageCard data={stats.module_usage} totalTenants={stats.active_tenants} />
          </div>

          {/* System Health Monitor */}
          <Card className="border-0 shadow-sm hover:shadow-md transition-shadow mb-6">
            <CardHeader className="pb-4">
              <div className="flex items-center justify-between">
                <div>
                  <CardTitle className="text-xl font-bold flex items-center gap-2">
                    <Server className="h-5 w-5 text-blue-600" />
                    System Health Monitor
                  </CardTitle>
                  <p className="text-sm text-gray-500 mt-1">Real-time system status and metrics</p>
                </div>
                <div className="text-right">
                  <p className="text-3xl font-bold text-gray-900">{stats.system_health.score}%</p>
                  <p className="text-xs text-gray-600">Uptime: {stats.system_health.uptime}</p>
                </div>
              </div>
            </CardHeader>
            <CardContent>
              <div className="grid grid-cols-1 md:grid-cols-3 gap-4 mb-4">
                <div className="flex items-center justify-between p-5 border rounded-lg bg-gradient-to-br from-white to-gray-50 hover:shadow-md transition-all">
                  <div className="flex items-center gap-3">
                    <div className="p-3 bg-blue-100 rounded-xl">
                      <Database className="h-5 w-5 text-blue-600" />
                    </div>
                    <div>
                      <span className="text-sm text-gray-600">Database</span>
                      <p className="font-semibold text-gray-900">Connection</p>
                    </div>
                  </div>
                  {getHealthBadge(stats.system_health.checks.database)}
                </div>
                <div className="flex items-center justify-between p-5 border rounded-lg bg-gradient-to-br from-white to-gray-50 hover:shadow-md transition-all">
                  <div className="flex items-center gap-3">
                    <div className="p-3 bg-purple-100 rounded-xl">
                      <Zap className="h-5 w-5 text-purple-600" />
                    </div>
                    <div>
                      <span className="text-sm text-gray-600">Cache</span>
                      <p className="font-semibold text-gray-900">Service</p>
                    </div>
                  </div>
                  {getHealthBadge(stats.system_health.checks.cache)}
                </div>
                <div className="flex items-center justify-between p-5 border rounded-lg bg-gradient-to-br from-white to-gray-50 hover:shadow-md transition-all">
                  <div className="flex items-center gap-3">
                    <div className="p-3 bg-emerald-100 rounded-xl">
                      <Activity className="h-5 w-5 text-emerald-600" />
                    </div>
                    <div>
                      <span className="text-sm text-gray-600">Queue</span>
                      <p className="font-semibold text-gray-900">Worker</p>
                    </div>
                  </div>
                  {getHealthBadge(stats.system_health.checks.queue)}
                </div>
              </div>

              {/* System Metrics */}
              <div className="grid grid-cols-3 gap-4 pt-4 border-t">
                <div className="text-center">
                  <p className="text-2xl font-bold text-gray-900">{stats.pending_jobs}</p>
                  <p className="text-xs text-gray-600 mt-1">Pending Jobs</p>
                </div>
                <div className="text-center">
                  <p className={`text-2xl font-bold ${stats.failed_jobs > 0 ? 'text-red-600' : 'text-green-600'}`}>
                    {stats.failed_jobs}
                  </p>
                  <p className="text-xs text-gray-600 mt-1">Failed Jobs</p>
                </div>
                <div className="text-center">
                  <p className="text-2xl font-bold text-gray-900">{stats.system_health.score}%</p>
                  <p className="text-xs text-gray-600 mt-1">Health Score</p>
                </div>
              </div>

              {/* Failed Jobs Alert */}
              {stats.failed_jobs > 0 && (
                <Alert variant="destructive" className="mt-4">
                  <AlertTriangle className="h-4 w-4" />
                  <AlertDescription>
                    <strong>{stats.failed_jobs}</strong> failed job{stats.failed_jobs > 1 ? 's' : ''} require immediate attention.
                    <Button 
                      variant="link" 
                      className="ml-2 h-auto p-0 text-red-700 underline"
                      onClick={() => globalThis.location.href = '/admin/system/jobs'}
                    >
                      View Details →
                    </Button>
                  </AlertDescription>
                </Alert>
              )}
            </CardContent>
          </Card>

          {/* Quick Actions Grid - Replacing old cards */}
          <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
            {/* Create Tenant */}
            <Card className="group cursor-pointer hover:shadow-lg transition-all duration-300 border-l-4 border-l-indigo-500">
              <CardContent 
                className="p-6"
                onClick={() => globalThis.location.href = '/admin/tenants/create'}
              >
                <div className="flex items-start justify-between mb-4">
                  <div className="p-3 bg-indigo-100 rounded-lg group-hover:bg-indigo-200 transition-colors">
                    <Building2 className="h-6 w-6 text-indigo-600" />
                  </div>
                  <ArrowRight className="h-5 w-5 text-gray-400 group-hover:text-indigo-600 group-hover:translate-x-1 transition-all" />
                </div>
                <h3 className="font-semibold text-lg mb-2 text-gray-900">Create New Tenant</h3>
                <p className="text-sm text-gray-600">Set up a new tenant with packages and modules</p>
              </CardContent>
            </Card>

            {/* Manage Packages */}
            <Card className="group cursor-pointer hover:shadow-lg transition-all duration-300 border-l-4 border-l-emerald-500">
              <CardContent 
                className="p-6"
                onClick={() => globalThis.location.href = '/admin/packages'}
              >
                <div className="flex items-start justify-between mb-4">
                  <div className="p-3 bg-emerald-100 rounded-lg group-hover:bg-emerald-200 transition-colors">
                    <Package className="h-6 w-6 text-emerald-600" />
                  </div>
                  <ArrowRight className="h-5 w-5 text-gray-400 group-hover:text-emerald-600 group-hover:translate-x-1 transition-all" />
                </div>
                <h3 className="font-semibold text-lg mb-2 text-gray-900">Manage Packages</h3>
                <p className="text-sm text-gray-600">Configure tenant packages and pricing plans</p>
              </CardContent>
            </Card>

            {/* System Jobs */}
            <Card className="group cursor-pointer hover:shadow-lg transition-all duration-300 border-l-4 border-l-amber-500">
              <CardContent 
                className="p-6"
                onClick={() => globalThis.location.href = '/admin/system/jobs'}
              >
                <div className="flex items-start justify-between mb-4">
                  <div className="p-3 bg-amber-100 rounded-lg group-hover:bg-amber-200 transition-colors">
                    <Activity className="h-6 w-6 text-amber-600" />
                  </div>
                  <ArrowRight className="h-5 w-5 text-gray-400 group-hover:text-amber-600 group-hover:translate-x-1 transition-all" />
                </div>
                <h3 className="font-semibold text-lg mb-2 text-gray-900">Job Queue</h3>
                <p className="text-sm text-gray-600">Monitor background jobs and system tasks</p>
              </CardContent>
            </Card>

            {/* View Tenants */}
            <Card className="group cursor-pointer hover:shadow-lg transition-all duration-300 border-l-4 border-l-blue-500">
              <CardContent 
                className="p-6"
                onClick={() => globalThis.location.href = '/admin/tenants'}
              >
                <div className="flex items-start justify-between mb-4">
                  <div className="p-3 bg-blue-100 rounded-lg group-hover:bg-blue-200 transition-colors">
                    <Building2 className="h-6 w-6 text-blue-600" />
                  </div>
                  <ArrowRight className="h-5 w-5 text-gray-400 group-hover:text-blue-600 group-hover:translate-x-1 transition-all" />
                </div>
                <h3 className="font-semibold text-lg mb-2 text-gray-900">All Tenants</h3>
                <p className="text-sm text-gray-600">View and manage all tenant accounts</p>
              </CardContent>
            </Card>

            {/* System Logs */}
            <Card className="group cursor-pointer hover:shadow-lg transition-all duration-300 border-l-4 border-l-purple-500">
              <CardContent 
                className="p-6"
                onClick={() => globalThis.location.href = '/admin/system/logs'}
              >
                <div className="flex items-start justify-between mb-4">
                  <div className="p-3 bg-purple-100 rounded-lg group-hover:bg-purple-200 transition-colors">
                    <Users className="h-6 w-6 text-purple-600" />
                  </div>
                  <ArrowRight className="h-5 w-5 text-gray-400 group-hover:text-purple-600 group-hover:translate-x-1 transition-all" />
                </div>
                <h3 className="font-semibold text-lg mb-2 text-gray-900">System Logs</h3>
                <p className="text-sm text-gray-600">Review application logs and activities</p>
              </CardContent>
            </Card>

            {/* Roles & Permissions */}
            <Card className="group cursor-pointer hover:shadow-lg transition-all duration-300 border-l-4 border-l-gray-500">
              <CardContent 
                className="p-6"
                onClick={() => globalThis.location.href = '/admin/roles'}
              >
                <div className="flex items-start justify-between mb-4">
                  <div className="p-3 bg-gray-100 rounded-lg group-hover:bg-gray-200 transition-colors">
                    <Users className="h-6 w-6 text-gray-600" />
                  </div>
                  <ArrowRight className="h-5 w-5 text-gray-400 group-hover:text-gray-600 group-hover:translate-x-1 transition-all" />
                </div>
                <h3 className="font-semibold text-lg mb-2 text-gray-900">Roles & Permissions</h3>
                <p className="text-sm text-gray-600">Manage admin roles and access control</p>
              </CardContent>
            </Card>
          </div>
        </div>
      </div>
    </AdminLayout>
  );
}