import React from 'react';
import { useQuery } from '@tanstack/react-query';
import { adminApi } from '../../api/admin';
import { AppLayout } from '../../components/layout/AppLayout';
import { PageLoader } from '../../components/ui/LoadingSpinner';
import { StatCard } from '../../components/ui/StatCard';
import { Building2, DollarSign, TrendingUp, BarChart3 } from 'lucide-react';
import type { AnalyticsData } from '../../types';

export function AnalyticsPage() {
  const { data, isLoading } = useQuery<AnalyticsData>({
    queryKey: ['admin-analytics'],
    queryFn: () => adminApi.getAnalytics(),
  });

  if (isLoading) {
    return (
      <AppLayout title="Analytics">
        <PageLoader />
      </AppLayout>
    );
  }

  return (
    <AppLayout title="Analytics">
      <div className="mb-6">
        <h1 className="text-xl sm:text-2xl font-bold text-surface-900">Analytics</h1>
        <p className="mt-1 text-sm text-surface-500">
          Revenue trends, growth metrics, and portfolio performance
        </p>
      </div>

      {/* Summary Stats */}
      <div className="mb-8 grid grid-cols-1 gap-4 sm:grid-cols-3">
        <StatCard
          title="Total Revenue"
          value={`$${data?.totalRevenue?.toLocaleString() ?? 0}`}
          icon={DollarSign}
          iconBg="bg-brand-100 text-brand-600"
        />
        <StatCard
          title="Avg. Revenue"
          value={`$${data?.avgRevenue?.toLocaleString() ?? 0}`}
          icon={TrendingUp}
          iconBg="bg-success/10 text-success"
        />
        <StatCard
          title="Organizations"
          value={data?.totalOrganizations ?? 0}
          icon={Building2}
          iconBg="bg-warning/10 text-warning"
        />
      </div>

      {/* Revenue Trend */}
      <div className="mb-8 rounded-xl border border-surface-200 bg-white p-4 sm:p-5">
        <div className="mb-4 flex items-center gap-2">
          <BarChart3 className="h-4 w-4 text-surface-500" />
          <h3 className="text-sm font-semibold text-surface-700">Revenue Trend</h3>
        </div>
        {data?.revenueTrend?.length === 0 ? (
          <div className="flex h-48 sm:h-64 items-center justify-center">
            <p className="text-sm text-surface-500">Revenue trend data coming soon</p>
          </div>
        ) : (
          <div className="h-48 sm:h-64">
            {/* Chart placeholder - Recharts would render here */}
            <div className="flex h-full items-end gap-2">
              {data?.revenueTrend?.map((point) => (
                <div key={point.month} className="flex-1">
                  <div
                    className="w-full rounded-t bg-brand-200"
                    style={{
                      height: `${Math.max((point.revenue / Math.max(...data.revenueTrend.map(p => p.revenue), 1)) * 100, 4)}%`,
                    }}
                  />
                  <p className="mt-1 text-center text-[10px] sm:text-xs text-surface-500">{point.month}</p>
                </div>
              ))}
            </div>
          </div>
        )}
      </div>

      {/* Top Organizations */}
      <div className="rounded-xl border border-surface-200 bg-white p-4 sm:p-5">
        <h3 className="mb-4 text-sm font-semibold text-surface-700">Top Organizations by Revenue</h3>
        {data?.topOrganizations?.length === 0 ? (
          <p className="text-sm text-surface-500">No organization data yet</p>
        ) : (
          <div className="space-y-3">
            {data?.topOrganizations?.map((org, idx) => (
              <div key={org.id} className="flex items-center gap-4 rounded-lg p-3 hover:bg-surface-50">
                <div className="flex h-8 w-8 items-center justify-center rounded-full bg-brand-100 text-xs font-semibold text-brand-600">
                  {idx + 1}
                </div>
                <div className="min-w-0 flex-1">
                  <p className="text-sm font-medium text-surface-900 truncate">{org.name}</p>
                </div>
                <div className="text-right">
                  <p className="text-sm font-semibold text-surface-900">
                    ${org.revenue.toLocaleString()}
                  </p>
                </div>
              </div>
            ))}
          </div>
        )}
      </div>
    </AppLayout>
  );
}