'use client';

import { useEffect, useState, useCallback } from 'react';
import Link from 'next/link';
import { apiFetchJson } from '@/lib/auth';

interface RecentTenant {
  id: string;
  name: string;
  slug: string;
  plan: string;
  isActive: boolean;
  createdAt: string;
}

interface ExpiringSubscription {
  id: string;
  endsAt: string;
  tenant: { name: string; slug: string };
}

interface DashboardStats {
  totalTenants: number;
  activeTenants: number;
  trialCount: number;
  suspendedCount: number;
  cancelledCount: number;
  totalStudents: number;
  activeStudents: number;
  totalUsers: number;
  recentTenants: RecentTenant[];
  expiringSubscriptions: ExpiringSubscription[];
}

const PLAN_LABELS: Record<string, { label: string; cls: string }> = {
  TRIAL: { label: 'Deneme', cls: 'bg-amber-50 text-amber-700' },
  STARTER: { label: 'Başlangıç', cls: 'bg-blue-50 text-blue-700' },
  GROWTH: { label: 'Büyüme', cls: 'bg-violet-50 text-violet-700' },
  ENTERPRISE: { label: 'Kurumsal', cls: 'bg-emerald-50 text-emerald-700' },
};

function StatCard({
  label,
  value,
  sub,
  subColor = 'text-slate-500',
  iconBg,
  icon,
  loading,
}: {
  label: string;
  value: number | string;
  sub?: string;
  subColor?: string;
  iconBg: string;
  icon: React.ReactNode;
  loading: boolean;
}) {
  if (loading) {
    return (
      <div className="animate-pulse rounded-2xl border border-slate-200 bg-white p-5 shadow-sm dark:border-zinc-700 dark:bg-zinc-900">
        <div className="flex items-start justify-between">
          <div className="space-y-2">
            <div className="h-3.5 w-24 rounded-lg bg-slate-200 dark:bg-zinc-700" />
            <div className="h-8 w-16 rounded-xl bg-slate-200 dark:bg-zinc-700" />
            <div className="h-3 w-20 rounded-lg bg-slate-100 dark:bg-zinc-800" />
          </div>
          <div className="h-10 w-10 rounded-xl bg-slate-200 dark:bg-zinc-700" />
        </div>
      </div>
    );
  }
  return (
    <div className="rounded-2xl border border-slate-200 bg-white p-5 shadow-sm transition-shadow hover:shadow-md dark:border-zinc-700 dark:bg-zinc-900">
      <div className="flex items-start justify-between">
        <div>
          <p className="text-sm font-medium text-slate-500 dark:text-zinc-400">{label}</p>
          <p className="mt-2 text-3xl font-bold tracking-tight text-slate-900 dark:text-white">
            {typeof value === 'number' ? value.toLocaleString('tr-TR') : value}
          </p>
          {sub && <p className={`mt-1 text-xs font-medium ${subColor}`}>{sub}</p>}
        </div>
        <div className={`flex h-10 w-10 items-center justify-center rounded-xl ${iconBg}`}>
          {icon}
        </div>
      </div>
    </div>
  );
}

export default function DashboardPage() {
  const [stats, setStats] = useState<DashboardStats | null>(null);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState('');

  const fetchStats = useCallback(async () => {
    setLoading(true);
    setError('');
    const result = await apiFetchJson<DashboardStats>('/v1/platform/dashboard/stats');
    if (result.error) {
      setError(result.error);
    } else if (result.data) {
      setStats(result.data);
    }
    setLoading(false);
  }, []);

  useEffect(() => {
    fetchStats();
  }, [fetchStats]);

  const s = stats;

  return (
    <div className="space-y-6">
      {/* Header */}
      <div className="rounded-2xl border border-slate-200 bg-gradient-to-r from-[#f8fafc] to-[#eef2ff] p-5 dark:border-zinc-700 dark:from-zinc-900 dark:to-zinc-800">
        <div className="flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between">
          <div>
            <p className="text-xs font-semibold uppercase tracking-[0.18em] text-indigo-500">Kontrol Merkezi</p>
            <h2 className="mt-1 text-xl font-semibold text-slate-900 dark:text-white">Süper Yönetici Paneli</h2>
            <p className="mt-0.5 text-sm text-slate-600 dark:text-zinc-400">Tüm platform operasyonlarını tek ekrandan yönetin</p>
          </div>
          <div className="flex flex-wrap gap-2">
            <Link
              href="/platform/schools?new=1"
              className="inline-flex items-center gap-2 rounded-xl bg-indigo-600 px-4 py-2.5 text-sm font-semibold text-white shadow-sm transition hover:bg-indigo-700"
            >
              <svg className="h-4 w-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
                <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M12 4v16m8-8H4" />
              </svg>
              Yeni Okul Ekle
            </Link>
            <Link
              href="/platform/schools"
              className="inline-flex items-center gap-2 rounded-xl border border-slate-200 bg-white px-4 py-2.5 text-sm font-semibold text-slate-700 shadow-sm transition hover:bg-slate-50 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-100"
            >
              Okulları Yönet
            </Link>
          </div>
        </div>
      </div>

      {/* Error */}
      {error && (
        <div className="rounded-2xl border border-red-200 bg-red-50 px-5 py-4 text-sm text-red-700 dark:border-red-800/40 dark:bg-red-950/20 dark:text-red-400">
          Veriler yüklenirken hata oluştu: {error}
        </div>
      )}

      {/* Stats Grid */}
      <div className="grid grid-cols-2 gap-4 lg:grid-cols-4">
        <StatCard
          label="Toplam Okul"
          value={s?.totalTenants ?? 0}
          sub="Kayıtlı tenant sayısı"
          iconBg="bg-indigo-50 dark:bg-indigo-950/40"
          loading={loading}
          icon={<svg className="h-5 w-5 text-indigo-600 dark:text-indigo-400" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth={1.75} d="M3 10.5 12 5l9 5.5M5 10v8.5A1.5 1.5 0 0 0 6.5 20h11A1.5 1.5 0 0 0 19 18.5V10M9 20v-5h6v5"/></svg>}
        />
        <StatCard
          label="Aktif Okul"
          value={s?.activeTenants ?? 0}
          sub="Erişim açık"
          subColor="text-emerald-600 dark:text-emerald-400"
          iconBg="bg-emerald-50 dark:bg-emerald-950/40"
          loading={loading}
          icon={<svg className="h-5 w-5 text-emerald-600 dark:text-emerald-400" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth={1.75} d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>}
        />
        <StatCard
          label="Toplam Öğrenci"
          value={s?.totalStudents ?? 0}
          sub={`${s?.activeStudents ?? 0} aktif`}
          iconBg="bg-sky-50 dark:bg-sky-950/40"
          loading={loading}
          icon={<svg className="h-5 w-5 text-sky-600 dark:text-sky-400" fill="none" stroke="currentColor" viewBox="0 0 24 24"><circle cx="12" cy="8" r="3.5" strokeWidth={1.75}/><path strokeLinecap="round" strokeLinejoin="round" strokeWidth={1.75} d="M4.5 20a7.5 7.5 0 0 1 15 0"/></svg>}
        />
        <StatCard
          label="Toplam Kullanıcı"
          value={s?.totalUsers ?? 0}
          sub="Tüm roller dahil"
          iconBg="bg-violet-50 dark:bg-violet-950/40"
          loading={loading}
          icon={<svg className="h-5 w-5 text-violet-600 dark:text-violet-400" fill="none" stroke="currentColor" viewBox="0 0 24 24"><circle cx="9" cy="8" r="3" strokeWidth={1.75}/><path strokeLinecap="round" strokeLinejoin="round" strokeWidth={1.75} d="M3.5 18a5.5 5.5 0 0 1 11 0"/><circle cx="17" cy="9" r="2.5" strokeWidth={1.75}/><path strokeLinecap="round" strokeLinejoin="round" strokeWidth={1.75} d="M14.5 18a4.5 4.5 0 0 1 6 0"/></svg>}
        />
        <StatCard
          label="Deneme Süreci"
          value={s?.trialCount ?? 0}
          sub="TRIAL abonelik"
          subColor="text-amber-600 dark:text-amber-400"
          iconBg="bg-amber-50 dark:bg-amber-950/40"
          loading={loading}
          icon={<svg className="h-5 w-5 text-amber-600 dark:text-amber-400" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth={1.75} d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>}
        />
        <StatCard
          label="Aktif Öğrenci"
          value={s?.activeStudents ?? 0}
          sub="Devam eden kayıt"
          subColor="text-emerald-600 dark:text-emerald-400"
          iconBg="bg-teal-50 dark:bg-teal-950/40"
          loading={loading}
          icon={<svg className="h-5 w-5 text-teal-600 dark:text-teal-400" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth={1.75} d="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"/></svg>}
        />
        <StatCard
          label="Askıya Alınan"
          value={s?.suspendedCount ?? 0}
          sub="SUSPENDED abonelik"
          subColor="text-red-600 dark:text-red-400"
          iconBg="bg-red-50 dark:bg-red-950/40"
          loading={loading}
          icon={<svg className="h-5 w-5 text-red-500 dark:text-red-400" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth={1.75} d="M10 9v6m4-6v6m7-3a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>}
        />
        <StatCard
          label="İptal Edilen"
          value={s?.cancelledCount ?? 0}
          sub="CANCELLED abonelik"
          iconBg="bg-slate-100 dark:bg-zinc-800"
          loading={loading}
          icon={<svg className="h-5 w-5 text-slate-500 dark:text-zinc-400" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path strokeLinecap="round" strokeLinejoin="round" strokeWidth={1.75} d="M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>}
        />
      </div>

      {/* Expiring subscriptions warning */}
      {!loading && s && s.expiringSubscriptions.length > 0 && (
        <div className="rounded-2xl border border-amber-200 bg-amber-50 p-4 dark:border-amber-800/40 dark:bg-amber-950/20">
          <div className="flex items-start gap-3">
            <div className="flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-amber-100 dark:bg-amber-900/40">
              <svg className="h-4 w-4 text-amber-600 dark:text-amber-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
                <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" />
              </svg>
            </div>
            <div>
              <p className="text-sm font-semibold text-amber-800 dark:text-amber-300">
                Süresi Dolmak Üzere Abonelikler
              </p>
              <p className="mt-0.5 text-sm text-amber-700 dark:text-amber-400">
                {s.expiringSubscriptions.length} abonelik 7 gün içinde sona eriyor
              </p>
              <div className="mt-2 flex flex-wrap gap-2">
                {s.expiringSubscriptions.map((sub) => (
                  <span
                    key={sub.id}
                    className="rounded-lg bg-amber-100 px-2.5 py-1 text-xs font-medium text-amber-800 dark:bg-amber-900/40 dark:text-amber-300"
                  >
                    {sub.tenant.name} — {new Date(sub.endsAt).toLocaleDateString('tr-TR')}
                  </span>
                ))}
              </div>
            </div>
          </div>
        </div>
      )}

      {/* Content Grid */}
      <div className="grid grid-cols-1 gap-5 lg:grid-cols-5">
        {/* Recent schools table */}
        <div className="lg:col-span-3">
          <div className="overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-sm dark:border-zinc-700 dark:bg-zinc-900">
            <div className="flex items-center justify-between border-b border-slate-100 px-5 py-4 dark:border-zinc-800">
              <div>
                <h3 className="font-semibold text-slate-900 dark:text-white">Son Kayıt Olan Okullar</h3>
                <p className="mt-0.5 text-xs text-slate-500 dark:text-zinc-400">En son 5 okul</p>
              </div>
              <Link
                href="/platform/schools"
                className="text-xs font-medium text-indigo-600 hover:text-indigo-700 dark:text-indigo-400 dark:hover:text-indigo-300"
              >
                Tümünü gör →
              </Link>
            </div>
            {loading ? (
              <div className="space-y-0 divide-y divide-slate-100 dark:divide-zinc-800">
                {[...Array(5)].map((_, i) => (
                  <div key={i} className="animate-pulse px-5 py-4">
                    <div className="flex items-center gap-3">
                      <div className="h-9 w-9 rounded-xl bg-slate-200 dark:bg-zinc-700" />
                      <div className="space-y-1.5">
                        <div className="h-3.5 w-32 rounded-lg bg-slate-200 dark:bg-zinc-700" />
                        <div className="h-3 w-20 rounded-lg bg-slate-100 dark:bg-zinc-800" />
                      </div>
                    </div>
                  </div>
                ))}
              </div>
            ) : s?.recentTenants.length === 0 ? (
              <div className="py-12 text-center text-sm text-slate-400 dark:text-zinc-500">
                Henüz okul kaydı yok
              </div>
            ) : (
              <div className="overflow-x-auto">
                <table className="w-full divide-y divide-slate-100 text-sm dark:divide-zinc-800">
                  <thead className="bg-slate-50 dark:bg-zinc-800/60">
                    <tr>
                      <th className="px-5 py-3 text-left text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-zinc-400">Okul</th>
                      <th className="px-5 py-3 text-left text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-zinc-400">Plan</th>
                      <th className="px-5 py-3 text-left text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-zinc-400">Durum</th>
                      <th className="px-5 py-3 text-left text-xs font-semibold uppercase tracking-wide text-slate-500 dark:text-zinc-400">Kayıt</th>
                    </tr>
                  </thead>
                  <tbody className="divide-y divide-slate-100 bg-white dark:divide-zinc-800 dark:bg-zinc-900">
                    {s?.recentTenants.map((t) => {
                      const plan = PLAN_LABELS[t.plan] ?? { label: t.plan, cls: 'bg-slate-100 text-slate-700' };
                      return (
                        <tr key={t.id} className="transition-colors hover:bg-slate-50/80 dark:hover:bg-zinc-800/50">
                          <td className="px-5 py-3.5">
                            <div className="flex items-center gap-3">
                              <div className="flex h-9 w-9 shrink-0 items-center justify-center rounded-xl bg-indigo-100 text-sm font-bold text-indigo-700 dark:bg-indigo-950/50 dark:text-indigo-300">
                                {t.name[0]?.toUpperCase()}
                              </div>
                              <div>
                                <Link href={`/platform/schools/${t.id}`} className="font-medium text-slate-900 hover:text-indigo-600 dark:text-white dark:hover:text-indigo-400">
                                  {t.name}
                                </Link>
                                <p className="text-xs text-slate-400 dark:text-zinc-500">{t.slug}</p>
                              </div>
                            </div>
                          </td>
                          <td className="px-5 py-3.5">
                            <span className={`inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium ${plan.cls}`}>
                              {plan.label}
                            </span>
                          </td>
                          <td className="px-5 py-3.5">
                            <span className={`inline-flex items-center gap-1.5 rounded-full px-2.5 py-0.5 text-xs font-medium ${t.isActive ? 'bg-emerald-50 text-emerald-700' : 'bg-slate-100 text-slate-600'}`}>
                              <span className={`h-1.5 w-1.5 rounded-full ${t.isActive ? 'bg-emerald-500' : 'bg-slate-400'}`} />
                              {t.isActive ? 'Aktif' : 'Pasif'}
                            </span>
                          </td>
                          <td className="px-5 py-3.5 text-xs text-slate-500 dark:text-zinc-400">
                            {new Date(t.createdAt).toLocaleDateString('tr-TR')}
                          </td>
                        </tr>
                      );
                    })}
                  </tbody>
                </table>
              </div>
            )}
          </div>
        </div>

        {/* Right column */}
        <div className="space-y-5 lg:col-span-2">
          {/* Quick actions */}
          <div className="rounded-2xl border border-slate-200 bg-white p-5 shadow-sm dark:border-zinc-700 dark:bg-zinc-900">
            <h3 className="mb-4 font-semibold text-slate-900 dark:text-white">Hızlı İşlemler</h3>
            <div className="space-y-2">
              {[
                { href: '/platform/schools?new=1', label: '+ Yeni okul ekle', cls: 'bg-indigo-600 text-white hover:bg-indigo-700' },
                { href: '/platform/subscriptions', label: 'Abonelikleri yönet', cls: 'border border-slate-200 text-slate-700 hover:bg-slate-50 dark:border-zinc-700 dark:text-zinc-100 dark:hover:bg-zinc-800' },
                { href: '/platform/plans', label: 'Planları görüntüle', cls: 'border border-slate-200 text-slate-700 hover:bg-slate-50 dark:border-zinc-700 dark:text-zinc-100 dark:hover:bg-zinc-800' },
                { href: '/platform/reports', label: 'Raporları aç', cls: 'border border-slate-200 text-slate-700 hover:bg-slate-50 dark:border-zinc-700 dark:text-zinc-100 dark:hover:bg-zinc-800' },
              ].map((a) => (
                <Link
                  key={a.href}
                  href={a.href}
                  className={`block w-full rounded-xl px-4 py-2.5 text-sm font-medium transition ${a.cls}`}
                >
                  {a.label}
                </Link>
              ))}
            </div>
          </div>

          {/* Platform status */}
          <div className="rounded-2xl border border-slate-200 bg-white p-5 shadow-sm dark:border-zinc-700 dark:bg-zinc-900">
            <h3 className="mb-4 font-semibold text-slate-900 dark:text-white">Platform Durumu</h3>
            <div className="space-y-3">
              {[
                { label: 'API Sunucusu', status: 'Çalışıyor' },
                { label: 'Veritabanı', status: 'Sağlıklı' },
                { label: 'E-posta Servisi', status: 'Yapılandırılmadı' },
                { label: 'SMS Servisi', status: 'Yapılandırılmadı' },
              ].map((item) => (
                <div key={item.label} className="flex items-center justify-between">
                  <span className="text-sm text-slate-600 dark:text-zinc-400">{item.label}</span>
                  <span className={`inline-flex items-center gap-1.5 text-xs font-medium ${item.status === 'Çalışıyor' || item.status === 'Sağlıklı' ? 'text-emerald-600 dark:text-emerald-400' : 'text-amber-600 dark:text-amber-400'}`}>
                    <span className={`h-1.5 w-1.5 rounded-full ${item.status === 'Çalışıyor' || item.status === 'Sağlıklı' ? 'bg-emerald-500' : 'bg-amber-500'}`} />
                    {item.status}
                  </span>
                </div>
              ))}
            </div>
          </div>
        </div>
      </div>
    </div>
  );
}
