import { ArrowLeft, TrendingDown } 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 AdminLayout from '@/Layouts/AdminLayout';
import { formatDateTime } from '@/lib/format';

interface FreshnessRecommendationDetail {
  id: number;
  page_url: string;
  action_type: string | null;
  title: string | null;
  reasoning: string | null;
  evidence: Record<string, unknown>[] | null;
  impact_score: string | null;
  urgency_score: string | null;
  freshness_score: string | null;
  confidence_score: string | null;
  effort_score: string | null;
  status: string;
  site_id: number | null;
  site_name: string | null;
  site_domain: string | null;
  page_decay_run_id: number | null;
  created_at: string;
  updated_at: string;
}

interface Props {
  recommendation: FreshnessRecommendationDetail;
}

const statusVariant = (status: string): 'default' | 'secondary' | 'outline' | 'destructive' => {
  if (status === 'pending') return 'secondary';
  if (status === 'applied') return 'default';
  if (status === 'rejected') return 'destructive';
  return 'outline';
};

export default function AdminFreshnessRecommendationShow({ recommendation }: Props) {
  return (
    <AdminLayout>
      <Head title={`Admin - Freshness 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.freshness-recommendations.index')}>Freshness Recommendations</Link>
              </BreadcrumbLink>
            </BreadcrumbItem>
            <BreadcrumbSeparator />
            <BreadcrumbItem>
              <BreadcrumbPage>#{recommendation.id}</BreadcrumbPage>
            </BreadcrumbItem>
          </BreadcrumbList>
        </Breadcrumb>

        <div className="flex items-start gap-3">
          <TrendingDown className="h-5 w-5 text-muted-foreground mt-0.5" />
          <div className="flex-1 min-w-0">
            <div className="flex items-center gap-2">
              <h1 className="text-xl font-semibold">Freshness Recommendation #{recommendation.id}</h1>
              <Badge variant={statusVariant(recommendation.status)}>{recommendation.status}</Badge>
            </div>
            <p className="text-sm text-muted-foreground font-mono truncate">{recommendation.page_url}</p>
          </div>
        </div>

        <div className="grid gap-6 md:grid-cols-3">
          <div className="space-y-4">
            <Card>
              <CardHeader>
                <CardTitle className="text-sm font-medium">Details</CardTitle>
              </CardHeader>
              <CardContent className="space-y-3 text-sm">
                {recommendation.site_id && (
                  <div>
                    <p className="text-xs text-muted-foreground">Site</p>
                    <Link href={route('admin.sites.show', { site: recommendation.site_id })} className="text-primary hover:underline font-medium">
                      {recommendation.site_name ?? '—'}
                    </Link>
                    {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 capitalize">{recommendation.action_type?.replace(/_/g, ' ') ?? '—'}</p>
                </div>
                <div>
                  <p className="text-xs text-muted-foreground">Created</p>
                  <p>{formatDateTime(recommendation.created_at)}</p>
                </div>
                <div>
                  <p className="text-xs text-muted-foreground">Updated</p>
                  <p>{formatDateTime(recommendation.updated_at)}</p>
                </div>
              </CardContent>
            </Card>

            <Card>
              <CardHeader>
                <CardTitle className="text-sm font-medium">Scores</CardTitle>
              </CardHeader>
              <CardContent className="space-y-2 text-sm">
                {[
                  { label: 'Impact', value: recommendation.impact_score },
                  { label: 'Urgency', value: recommendation.urgency_score },
                  { label: 'Freshness', value: recommendation.freshness_score },
                  { label: 'Confidence', value: recommendation.confidence_score },
                  { label: 'Effort', value: recommendation.effort_score },
                ].map(({ label, value }) => (
                  <div key={label} className="flex justify-between">
                    <span className="text-muted-foreground">{label}</span>
                    <span className="font-mono">{value != null ? Number(value).toFixed(2) : '—'}</span>
                  </div>
                ))}
              </CardContent>
            </Card>
          </div>

          <div className="md:col-span-2 space-y-4">
            {recommendation.title && (
              <Card>
                <CardHeader>
                  <CardTitle className="text-sm font-medium">Title</CardTitle>
                </CardHeader>
                <CardContent>
                  <p className="text-sm">{recommendation.title}</p>
                </CardContent>
              </Card>
            )}

            {recommendation.reasoning && (
              <Card>
                <CardHeader>
                  <CardTitle className="text-sm font-medium">Reasoning</CardTitle>
                </CardHeader>
                <CardContent>
                  <p className="text-sm leading-relaxed">{recommendation.reasoning}</p>
                </CardContent>
              </Card>
            )}

            {recommendation.evidence && recommendation.evidence.length > 0 && (
              <Card>
                <CardHeader>
                  <CardTitle className="text-sm font-medium">Evidence</CardTitle>
                </CardHeader>
                <CardContent>
                  <pre className="text-xs bg-muted p-3 rounded-md overflow-auto max-h-64">
                    {JSON.stringify(recommendation.evidence, null, 2)}
                  </pre>
                </CardContent>
              </Card>
            )}
          </div>
        </div>

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