import { ArrowLeft, Search } from 'lucide-react';

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

import { Badge } from '@/Components/ui/badge';
import {
  Breadcrumb,
  BreadcrumbItem,
  BreadcrumbLink,
  BreadcrumbList,
  BreadcrumbPage,
  BreadcrumbSeparator,
} from '@/Components/ui/breadcrumb';
import { Button } from '@/Components/ui/button';
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 { formatDateTime } from '@/lib/format';

interface RecommendationRow {
  id: number;
  action_type: string | null;
  lifecycle_status: string | null;
  impact_score: string | number | null;
  created_at: string;
}

interface FindingDetail {
  id: number;
  analysis_run_id: number;
  site_id: number | null;
  site_name: string | null;
  site_domain: string | null;
  page_url: string | null;
  dimension_type: string | null;
  type: string | null;
  direction: string | null;
  metric_before: string | null;
  metric_after: string | null;
  delta_absolute: string | null;
  delta_percent: string | null;
  segment_type: string | null;
  segment_value: string | null;
  supporting_data: Record<string, unknown> | null;
  created_at: string;
  recommendations: RecommendationRow[];
}

interface Props {
  finding: FindingDetail;
}

export default function AdminFindingShow({ finding }: Props) {
  return (
    <AdminLayout>
      <Head title={`Admin - Finding #${finding.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.findings.index')}>Findings</Link>
              </BreadcrumbLink>
            </BreadcrumbItem>
            <BreadcrumbSeparator />
            <BreadcrumbItem>
              <BreadcrumbPage>Finding #{finding.id}</BreadcrumbPage>
            </BreadcrumbItem>
          </BreadcrumbList>
        </Breadcrumb>

        <div className="flex items-center gap-3">
          <Search className="h-5 w-5 text-muted-foreground" />
          <div>
            <h1 className="text-xl font-semibold">Finding #{finding.id}</h1>
            {finding.page_url && (
              <p className="text-sm text-muted-foreground font-mono truncate max-w-xl">{finding.page_url}</p>
            )}
          </div>
          {finding.dimension_type && (
            <Badge variant="secondary" className="ml-auto">{finding.dimension_type}</Badge>
          )}
        </div>

        <div className="grid gap-6 md:grid-cols-2">
          <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">Analysis Run</p>
                <Link
                  href={route('admin.analysis-runs.show', { analysisRun: finding.analysis_run_id })}
                  className="text-primary hover:underline font-mono"
                >
                  #{finding.analysis_run_id}
                </Link>
              </div>
              {finding.site_id && (
                <div>
                  <p className="text-xs text-muted-foreground">Site</p>
                  <Link href={route('admin.sites.show', { site: finding.site_id })} className="text-primary hover:underline font-medium">
                    {finding.site_name ?? '—'}
                  </Link>
                  {finding.site_domain && (
                    <p className="text-xs text-muted-foreground">{finding.site_domain}</p>
                  )}
                </div>
              )}
              {finding.type && (
                <div>
                  <p className="text-xs text-muted-foreground">Type</p>
                  <p className="font-medium capitalize">{finding.type}</p>
                </div>
              )}
              {finding.direction && (
                <div>
                  <p className="text-xs text-muted-foreground">Direction</p>
                  <p className="capitalize">{finding.direction}</p>
                </div>
              )}
              {finding.segment_type && (
                <div>
                  <p className="text-xs text-muted-foreground">Segment</p>
                  <p className="font-mono text-xs">{finding.segment_type}: {finding.segment_value ?? '—'}</p>
                </div>
              )}
              <div>
                <p className="text-xs text-muted-foreground">Created</p>
                <p>{formatDateTime(finding.created_at)}</p>
              </div>
            </CardContent>
          </Card>

          <Card>
            <CardHeader>
              <CardTitle className="text-sm font-medium">Metrics</CardTitle>
            </CardHeader>
            <CardContent className="space-y-3 text-sm">
              <div className="grid grid-cols-2 gap-4">
                <div>
                  <p className="text-xs text-muted-foreground">Before</p>
                  <p className="font-mono text-lg font-medium">{finding.metric_before ?? '—'}</p>
                </div>
                <div>
                  <p className="text-xs text-muted-foreground">After</p>
                  <p className="font-mono text-lg font-medium">{finding.metric_after ?? '—'}</p>
                </div>
              </div>
              {finding.delta_absolute != null && (
                <div>
                  <p className="text-xs text-muted-foreground">Delta (absolute)</p>
                  <p className="font-mono">{finding.delta_absolute}</p>
                </div>
              )}
              {finding.delta_percent != null && (
                <div>
                  <p className="text-xs text-muted-foreground">Delta (percent)</p>
                  <p className="font-mono">{finding.delta_percent}%</p>
                </div>
              )}
            </CardContent>
          </Card>

          {finding.recommendations.length > 0 && (
            <Card className="md:col-span-2">
              <CardHeader>
                <CardTitle className="text-sm font-medium">
                  Recommendations ({finding.recommendations.length})
                </CardTitle>
              </CardHeader>
              <CardContent>
                <Table>
                  <TableHeader>
                    <TableRow>
                      <TableHead>ID</TableHead>
                      <TableHead>Action Type</TableHead>
                      <TableHead>Status</TableHead>
                      <TableHead>Impact</TableHead>
                      <TableHead>Created</TableHead>
                      <TableHead />
                    </TableRow>
                  </TableHeader>
                  <TableBody>
                    {finding.recommendations.map((rec) => (
                      <TableRow key={rec.id}>
                        <TableCell className="font-mono text-xs">#{rec.id}</TableCell>
                        <TableCell className="text-sm">
                          {rec.action_type ? rec.action_type.replace(/_/g, ' ') : '—'}
                        </TableCell>
                        <TableCell>
                          {rec.lifecycle_status ? (
                            <Badge variant="outline">{rec.lifecycle_status}</Badge>
                          ) : '—'}
                        </TableCell>
                        <TableCell className="font-mono text-xs">{rec.impact_score ?? '—'}</TableCell>
                        <TableCell className="text-xs text-muted-foreground">
                          {formatDateTime(rec.created_at)}
                        </TableCell>
                        <TableCell>
                          <Link
                            href={route('admin.recommendations.show', { recommendation: rec.id })}
                            className="text-xs text-primary hover:underline"
                          >
                            View →
                          </Link>
                        </TableCell>
                      </TableRow>
                    ))}
                  </TableBody>
                </Table>
              </CardContent>
            </Card>
          )}
        </div>

        <Button variant="outline" asChild>
          <Link href={route('admin.findings.index')}>
            <ArrowLeft className="mr-2 h-4 w-4" />
            Back to Findings
          </Link>
        </Button>
      </div>
    </AdminLayout>
  );
}
