import React from 'react';
import { useQuery } from '@tanstack/react-query';
import { partnerApi } from '../../api/partner';
import { AppLayout } from '../../components/layout/AppLayout';
import { PageLoader } from '../../components/ui/LoadingSpinner';
import { StatCard } from '../../components/ui/StatCard';
import { DollarSign, TrendingUp, Calendar } from 'lucide-react';
import type { CommissionData } from '../../types';

export function CommissionsPage() {
  const { data, isLoading } = useQuery<CommissionData>({
    queryKey: ['commissions'],
    queryFn: () => partnerApi.getCommissions(),
  });

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

  const total = data?.total_commission ?? 0;
  const pending = data?.pending ?? 0;
  const paid = data?.paid ?? 0;

  return (
    <AppLayout title="Commissions">
      {/* Header */}
      <div className="mb-6">
        <h1 className="text-xl sm:text-2xl font-bold text-surface-900 truncate">Commissions</h1>
        <p className="mt-1 text-sm text-surface-500">
          Track your partner commissions and payouts
        </p>
      </div>

      {/* Summary Cards */}
      <div className="mb-8 grid grid-cols-1 gap-4 sm:grid-cols-3">
        <StatCard
          title="Total Commission"
          value={`$${total.toLocaleString(undefined, { maximumFractionDigits: 0 })}`}
          icon={DollarSign}
          iconBg="bg-brand-100 text-brand-600"
        />
        <StatCard
          title="Pending"
          value={`$${pending.toLocaleString(undefined, { maximumFractionDigits: 0 })}`}
          icon={Calendar}
          iconBg="bg-warning/10 text-warning"
        />
        <StatCard
          title="Paid"
          value={`$${paid.toLocaleString(undefined, { maximumFractionDigits: 0 })}`}
          icon={TrendingUp}
          iconBg="bg-success/10 text-success"
        />
      </div>

      {/* Payout Info */}
      <div className="mb-8 rounded-xl border border-surface-200 bg-white p-5">
        <h3 className="mb-3 text-sm font-semibold text-surface-700">Payout Schedule</h3>
        <div className="flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between">
          <div>
            <p className="text-sm text-surface-500">Next Payout Date</p>
            <p className="text-lg font-semibold text-surface-900">
              {data?.next_payout_date ? new Date(data.next_payout_date).toLocaleDateString() : 'N/A'}
            </p>
          </div>
          <div className="sm:text-right">
            <p className="text-sm text-surface-500">Commission Rate</p>
            <p className="text-lg font-semibold text-surface-900">
              {data?.commission_rate ? `${(data.commission_rate * 100).toFixed(0)}%` : '—'}
            </p>
          </div>
        </div>
      </div>

      {/* Monthly Breakdown */}
      <div className="rounded-xl border border-surface-200 bg-white p-5">
        <h3 className="mb-3 text-sm font-semibold text-surface-700">Monthly Breakdown</h3>
        <div className="overflow-x-auto">
          <table className="w-full text-sm">
            <thead>
              <tr className="border-b border-surface-200">
                <th className="pb-3 text-left font-medium text-surface-500">Organization</th>
                <th className="pb-3 text-right font-medium text-surface-500">Monthly Revenue</th>
                <th className="pb-3 text-right font-medium text-surface-500">Commission</th>
                <th className="pb-3 text-right font-medium text-surface-500">Status</th>
              </tr>
            </thead>
            <tbody className="divide-y divide-surface-100">
              {data?.monthly_breakdown?.map((item) => (
                <tr key={item.organization_id} className="hover:bg-surface-50 min-h-[44px]">
                  <td className="py-3 font-medium text-surface-900">{item.organization_name}</td>
                  <td className="py-3 text-right text-surface-600">
                    ${item.monthly_revenue.toLocaleString(undefined, { maximumFractionDigits: 0 })}
                  </td>
                  <td className="py-3 text-right font-medium text-surface-900">
                    ${item.commission_amount.toLocaleString(undefined, { maximumFractionDigits: 0 })}
                  </td>
                  <td className="py-3 text-right">
                    <span
                      className={`inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium ${
                        item.status === 'paid'
                          ? 'bg-success/10 text-success'
                          : 'bg-warning/10 text-warning'
                      }`}
                    >
                      {item.status}
                    </span>
                  </td>
                </tr>
              ))}
            </tbody>
          </table>
        </div>
      </div>
    </AppLayout>
  );
}
