import { ArrowLeft, FileText } 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, formatNumber } from '@/lib/format';

interface ContentBriefDetail {
  id: number;
  site_id: number;
  site_name: string | null;
  site_domain: string | null;
  user_id: number;
  user_name: string | null;
  user_email: string | null;
  target_keyword: string | null;
  status: string;
  model_used: string | null;
  prompt_tokens: number | null;
  completion_tokens: number | null;
  generation_error: string | null;
  h1_recommendation: string | null;
  h2_structure: string[] | null;
  key_entities: string[] | null;
  target_word_count_min: number | null;
  target_word_count_max: number | null;
  internal_links: string[] | null;
  audience_context: string | null;
  competitive_notes: string | null;
  custom_instructions: string | null;
  generated_at: string | null;
  edited_at: string | null;
  created_at: string;
}

interface Props {
  brief: ContentBriefDetail;
}

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

export default function AdminContentBriefShow({ brief }: Props) {
  const totalTokens = (brief.prompt_tokens ?? 0) + (brief.completion_tokens ?? 0);

  return (
    <AdminLayout>
      <Head title={`Admin - Content Brief #${brief.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.content-briefs.index')}>Content Briefs</Link>
              </BreadcrumbLink>
            </BreadcrumbItem>
            <BreadcrumbSeparator />
            <BreadcrumbItem>
              <BreadcrumbPage>#{brief.id}</BreadcrumbPage>
            </BreadcrumbItem>
          </BreadcrumbList>
        </Breadcrumb>

        <div className="flex items-center gap-3">
          <FileText className="h-5 w-5 text-muted-foreground" />
          <div>
            <div className="flex items-center gap-2">
              <h1 className="text-xl font-semibold">
                {brief.target_keyword ?? `Brief #${brief.id}`}
              </h1>
              <Badge variant={statusVariant(brief.status)}>{brief.status}</Badge>
            </div>
          </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">
                <div>
                  <p className="text-xs text-muted-foreground">Site</p>
                  <Link href={route('admin.sites.show', { site: brief.site_id })} className="text-primary hover:underline font-medium">
                    {brief.site_name ?? '—'}
                  </Link>
                  {brief.site_domain && (
                    <p className="text-xs text-muted-foreground">{brief.site_domain}</p>
                  )}
                </div>
                <div>
                  <p className="text-xs text-muted-foreground">User</p>
                  <Link href={route('admin.users.show', { user: brief.user_id })} className="text-primary hover:underline font-medium">
                    {brief.user_name ?? '—'}
                  </Link>
                  {brief.user_email && (
                    <p className="text-xs text-muted-foreground">{brief.user_email}</p>
                  )}
                </div>
                <div>
                  <p className="text-xs text-muted-foreground">Model</p>
                  <p className="font-mono text-xs">{brief.model_used ?? '—'}</p>
                </div>
                {totalTokens > 0 && (
                  <div>
                    <p className="text-xs text-muted-foreground">Tokens Used</p>
                    <p className="font-mono">{formatNumber(totalTokens)}</p>
                    <p className="text-xs text-muted-foreground">
                      {formatNumber(brief.prompt_tokens ?? 0)} prompt + {formatNumber(brief.completion_tokens ?? 0)} completion
                    </p>
                  </div>
                )}
                <div>
                  <p className="text-xs text-muted-foreground">Created</p>
                  <p>{formatDateTime(brief.created_at)}</p>
                </div>
                {brief.generated_at && (
                  <div>
                    <p className="text-xs text-muted-foreground">Generated</p>
                    <p>{formatDateTime(brief.generated_at)}</p>
                  </div>
                )}
                {brief.edited_at && (
                  <div>
                    <p className="text-xs text-muted-foreground">Edited</p>
                    <p>{formatDateTime(brief.edited_at)}</p>
                  </div>
                )}
                {brief.target_word_count_min != null && (
                  <div>
                    <p className="text-xs text-muted-foreground">Target Word Count</p>
                    <p>{formatNumber(brief.target_word_count_min)}–{formatNumber(brief.target_word_count_max ?? 0)} words</p>
                  </div>
                )}
              </CardContent>
            </Card>
          </div>

          <div className="md:col-span-2 space-y-4">
            {brief.generation_error && (
              <Card className="border-destructive/50">
                <CardHeader>
                  <CardTitle className="text-sm font-medium text-destructive">Generation Error</CardTitle>
                </CardHeader>
                <CardContent>
                  <pre className="text-xs bg-muted p-3 rounded-md overflow-auto whitespace-pre-wrap break-all">
                    {brief.generation_error}
                  </pre>
                </CardContent>
              </Card>
            )}

            {brief.h1_recommendation && (
              <Card>
                <CardHeader>
                  <CardTitle className="text-sm font-medium">H1 Recommendation</CardTitle>
                </CardHeader>
                <CardContent>
                  <p className="text-sm font-medium">{brief.h1_recommendation}</p>
                </CardContent>
              </Card>
            )}

            {brief.h2_structure && brief.h2_structure.length > 0 && (
              <Card>
                <CardHeader>
                  <CardTitle className="text-sm font-medium">H2 Structure</CardTitle>
                </CardHeader>
                <CardContent>
                  <ol className="space-y-1 text-sm list-decimal list-inside">
                    {brief.h2_structure.map((h2, i) => (
                      <li key={i} className="text-foreground">{h2}</li>
                    ))}
                  </ol>
                </CardContent>
              </Card>
            )}

            {brief.key_entities && brief.key_entities.length > 0 && (
              <Card>
                <CardHeader>
                  <CardTitle className="text-sm font-medium">Key Entities</CardTitle>
                </CardHeader>
                <CardContent>
                  <div className="flex flex-wrap gap-2">
                    {brief.key_entities.map((entity, i) => (
                      <Badge key={i} variant="secondary">{entity}</Badge>
                    ))}
                  </div>
                </CardContent>
              </Card>
            )}

            {brief.audience_context && (
              <Card>
                <CardHeader>
                  <CardTitle className="text-sm font-medium">Audience Context</CardTitle>
                </CardHeader>
                <CardContent>
                  <p className="text-sm">{brief.audience_context}</p>
                </CardContent>
              </Card>
            )}

            {brief.competitive_notes && (
              <Card>
                <CardHeader>
                  <CardTitle className="text-sm font-medium">Competitive Notes</CardTitle>
                </CardHeader>
                <CardContent>
                  <p className="text-sm">{brief.competitive_notes}</p>
                </CardContent>
              </Card>
            )}
          </div>
        </div>

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