import { FileText, Lightbulb } from 'lucide-react';

import { Head, Link } from '@inertiajs/react';

import PageHeader from '@/Components/layout/PageHeader';
import { Badge } from '@/Components/ui/badge';
import {
  Breadcrumb,
  BreadcrumbItem,
  BreadcrumbLink,
  BreadcrumbList,
  BreadcrumbPage,
  BreadcrumbSeparator,
} from '@/Components/ui/breadcrumb';
import { Card, CardContent, CardHeader, CardTitle } from '@/Components/ui/card';
import {
  Table,
  TableBody,
  TableCell,
  TableHead,
  TableHeader,
  TableRow,
} from '@/Components/ui/table';
import AdminLayout from '@/Layouts/AdminLayout';
import { formatDate, formatRelativeTime, formatNumber } from '@/lib/format';

interface FindingMetrics {
  clicks?: number;
  impressions?: number;
  ctr?: number;
  position?: number;
}

interface FindingDetail {
  id: number;
  dimension_type: string;
  metrics_before: FindingMetrics | null;
  metrics_after: FindingMetrics | null;
}

interface AiDraftRow {
  id: number;
  status: string;
  model_used: string | null;
  prompt_tokens: number | null;
  completion_tokens: number | null;
  created_at: string;
}

interface RecommendationDetail {
  id: number;
  site_id: number | null;
  site_name: string | null;
  site_domain: string | null;
  analysis_run_id: number | null;
  page_url: string;
  action_type: string;
  impact_score: string | number;
  lifecycle_status: string;
  roi_performance_multiplier: number | null;
  finding: FindingDetail | null;
  ai_drafts: AiDraftRow[];
  created_at: string;
}

interface Props {
  recommendation: RecommendationDetail;
}

const lifecycleVariant = (status: string): 'default' | 'secondary' | 'outline' | 'destructive' | 'success' => {
  switch (status) {
    case 'applied':
    case 'tracking':
      return 'success';
    case 'approved':
      return 'default';
    case 'rejected':
      return 'destructive';
    case 'reviewed':
      return 'secondary';
    default:
      return 'outline';
  }
};

function MetricRow({ label, value }: { label: string; value: number | undefined }) {
  if (value === undefined || value === null) return null;
  return (
    <div className="flex justify-between text-sm">
      <span className="text-muted-foreground">{label}</span>
      <span className="font-mono">{typeof value === 'number' && value < 1 ? (value * 100).toFixed(2) + '%' : formatNumber(value)}</span>
    </div>
  );
}

export default function RecommendationsShow({ recommendation }: Props) {
  return (
    <AdminLayout>
      <Head title={`Recommendation #${recommendation.id}`} />
      <div className="container py-6 space-y-6">
        <Breadcrumb>
          <BreadcrumbList>
            <BreadcrumbItem>
              <BreadcrumbLink asChild>
                <Link href="/admin">Admin</Link>
              </BreadcrumbLink>
            </BreadcrumbItem>
            <BreadcrumbSeparator />
            <BreadcrumbItem>
              <BreadcrumbLink asChild>
                <Link href={route('admin.recommendations.index')}>Recommendations</Link>
              </BreadcrumbLink>
            </BreadcrumbItem>
            <BreadcrumbSeparator />
            <BreadcrumbItem>
              <BreadcrumbPage>Recommendation #{recommendation.id}</BreadcrumbPage>
            </BreadcrumbItem>
          </BreadcrumbList>
        </Breadcrumb>

        <PageHeader
          title={`Recommendation #${recommendation.id}`}
          description={recommendation.page_url}
          actions={
            recommendation.site_id && (
              <a
                href={route('recommendations.show', {
                  site: recommendation.site_id,
                  recommendation: recommendation.id,
                })}
                className="text-sm text-primary hover:underline"
                target="_blank"
                rel="noreferrer"
              >
                View as user →
              </a>
            )
          }
        />

        <div className="grid gap-6 md:grid-cols-3">
          <div className="md:col-span-1 space-y-4">
            <Card>
              <CardHeader>
                <CardTitle className="text-sm font-medium">Details</CardTitle>
              </CardHeader>
              <CardContent className="space-y-3 text-sm">
                <div>
                  <p className="text-xs text-muted-foreground">Site</p>
                  {recommendation.site_id ? (
                    <a
                      href={route('admin.sites.show', { site: recommendation.site_id })}
                      className="text-primary hover:underline font-medium"
                    >
                      {recommendation.site_name ?? '—'}
                    </a>
                  ) : (
                    <span className="text-muted-foreground">—</span>
                  )}
                  {recommendation.site_domain && (
                    <p className="text-xs text-muted-foreground">{recommendation.site_domain}</p>
                  )}
                </div>
                <div>
                  <p className="text-xs text-muted-foreground">Action Type</p>
                  <p className="font-medium">{recommendation.action_type.replace(/_/g, ' ')}</p>
                </div>
                <div>
                  <p className="text-xs text-muted-foreground">Lifecycle Status</p>
                  <Badge variant={lifecycleVariant(recommendation.lifecycle_status)}>
                    {recommendation.lifecycle_status}
                  </Badge>
                </div>
                <div>
                  <p className="text-xs text-muted-foreground">Impact Score</p>
                  <p className="font-mono font-medium">{recommendation.impact_score}</p>
                </div>
                {recommendation.roi_performance_multiplier !== null && (
                  <div>
                    <p className="text-xs text-muted-foreground">ROI Multiplier</p>
                    <p className="font-mono">{recommendation.roi_performance_multiplier}×</p>
                  </div>
                )}
                <div>
                  <p className="text-xs text-muted-foreground">Created</p>
                  <p>{formatDate(recommendation.created_at)}</p>
                </div>
                {recommendation.analysis_run_id && (
                  <div>
                    <p className="text-xs text-muted-foreground">Analysis Run</p>
                    <p className="font-mono text-xs">#{recommendation.analysis_run_id}</p>
                  </div>
                )}
              </CardContent>
            </Card>

            {recommendation.finding && (
              <Card>
                <CardHeader>
                  <CardTitle className="text-sm font-medium">Traffic Finding</CardTitle>
                </CardHeader>
                <CardContent className="space-y-3 text-sm">
                  <div>
                    <p className="text-xs text-muted-foreground">Dimension</p>
                    <p className="capitalize">{recommendation.finding.dimension_type?.replace(/_/g, ' ') ?? '—'}</p>
                  </div>
                  {recommendation.finding.metrics_before && (
                    <div>
                      <p className="text-xs text-muted-foreground mb-1">Before</p>
                      <div className="space-y-1">
                        <MetricRow label="Clicks" value={recommendation.finding.metrics_before.clicks} />
                        <MetricRow label="Impressions" value={recommendation.finding.metrics_before.impressions} />
                        <MetricRow label="CTR" value={recommendation.finding.metrics_before.ctr} />
                        <MetricRow label="Position" value={recommendation.finding.metrics_before.position} />
                      </div>
                    </div>
                  )}
                  {recommendation.finding.metrics_after && (
                    <div>
                      <p className="text-xs text-muted-foreground mb-1">After</p>
                      <div className="space-y-1">
                        <MetricRow label="Clicks" value={recommendation.finding.metrics_after.clicks} />
                        <MetricRow label="Impressions" value={recommendation.finding.metrics_after.impressions} />
                        <MetricRow label="CTR" value={recommendation.finding.metrics_after.ctr} />
                        <MetricRow label="Position" value={recommendation.finding.metrics_after.position} />
                      </div>
                    </div>
                  )}
                </CardContent>
              </Card>
            )}
          </div>

          <div className="md:col-span-2">
            <Card>
              <CardHeader>
                <div className="flex items-center gap-2">
                  <FileText className="h-4 w-4 text-muted-foreground" />
                  <CardTitle className="text-sm font-medium">AI Drafts</CardTitle>
                </div>
              </CardHeader>
              <CardContent>
                {recommendation.ai_drafts.length === 0 ? (
                  <div className="flex flex-col items-center justify-center py-10 text-center">
                    <Lightbulb className="h-8 w-8 text-muted-foreground mb-3" />
                    <p className="text-sm font-medium">No drafts generated</p>
                    <p className="text-xs text-muted-foreground mt-1">
                      No AI drafts have been generated for this recommendation yet.
                    </p>
                  </div>
                ) : (
                  <Table>
                    <TableHeader>
                      <TableRow>
                        <TableHead>ID</TableHead>
                        <TableHead>Status</TableHead>
                        <TableHead>Model</TableHead>
                        <TableHead>Tokens</TableHead>
                        <TableHead>Created</TableHead>
                        <TableHead />
                      </TableRow>
                    </TableHeader>
                    <TableBody>
                      {recommendation.ai_drafts.map((draft) => (
                        <TableRow key={draft.id}>
                          <TableCell className="font-mono text-xs">#{draft.id}</TableCell>
                          <TableCell>
                            <Badge variant="outline">{draft.status}</Badge>
                          </TableCell>
                          <TableCell className="font-mono text-xs">{draft.model_used ?? '—'}</TableCell>
                          <TableCell className="font-mono text-xs">
                            {formatNumber((draft.prompt_tokens ?? 0) + (draft.completion_tokens ?? 0))}
                          </TableCell>
                          <TableCell className="text-xs text-muted-foreground">
                            {formatRelativeTime(draft.created_at)}
                          </TableCell>
                          <TableCell>
                            <a
                              href={route('admin.ai-drafts.show', { aiDraft: draft.id })}
                              className="text-xs text-primary hover:underline"
                            >
                              View →
                            </a>
                          </TableCell>
                        </TableRow>
                      ))}
                    </TableBody>
                  </Table>
                )}
              </CardContent>
            </Card>
          </div>
        </div>
      </div>
    </AdminLayout>
  );
}
