import { FileText } 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 AdminLayout from '@/Layouts/AdminLayout';
import { formatDate, formatNumber } from '@/lib/format';
import { sanitizeHtml } from '@/lib/sanitize';

interface AiDraftDetail {
  id: number;
  site_id: number | null;
  site_name: string | null;
  site_domain: string | null;
  ai_job_id: number | null;
  recommendation_id: number | null;
  recommendation_action_type: string | null;
  recommendation_page_url: string | null;
  recommendation_lifecycle_status: string | null;
  model_used: string | null;
  prompt_tokens: number | null;
  completion_tokens: number | null;
  status: string | null;
  publish_status: string | null;
  content: string | null;
  created_at: string;
}

interface Props {
  draft: AiDraftDetail;
}

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

  return (
    <AdminLayout>
      <Head title={`AI Draft #${draft.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.ai-drafts.index')}>AI Drafts</Link>
              </BreadcrumbLink>
            </BreadcrumbItem>
            <BreadcrumbSeparator />
            <BreadcrumbItem>
              <BreadcrumbPage>Draft #{draft.id}</BreadcrumbPage>
            </BreadcrumbItem>
          </BreadcrumbList>
        </Breadcrumb>

        <PageHeader
          title={`AI Draft #${draft.id}`}
          description={`Generated ${formatDate(draft.created_at)}`}
        />

        <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>
                  {draft.site_id ? (
                    <a
                      href={route('admin.sites.show', { site: draft.site_id })}
                      className="text-primary hover:underline font-medium"
                    >
                      {draft.site_name ?? '—'}
                    </a>
                  ) : (
                    <span className="text-muted-foreground">—</span>
                  )}
                  {draft.site_domain && (
                    <p className="text-xs text-muted-foreground">{draft.site_domain}</p>
                  )}
                </div>
                <div>
                  <p className="text-xs text-muted-foreground">Status</p>
                  <Badge variant="outline">{draft.status ?? '—'}</Badge>
                </div>
                {draft.publish_status && (
                  <div>
                    <p className="text-xs text-muted-foreground">Publish Status</p>
                    <Badge variant="secondary">{draft.publish_status}</Badge>
                  </div>
                )}
                <div>
                  <p className="text-xs text-muted-foreground">Model</p>
                  <p className="font-mono text-xs">{draft.model_used ?? '—'}</p>
                </div>
              </CardContent>
            </Card>

            <Card>
              <CardHeader>
                <CardTitle className="text-sm font-medium">Token Usage</CardTitle>
              </CardHeader>
              <CardContent className="space-y-2 text-sm">
                <div className="flex justify-between">
                  <span className="text-muted-foreground">Prompt</span>
                  <span className="font-mono">{formatNumber(draft.prompt_tokens ?? 0)}</span>
                </div>
                <div className="flex justify-between">
                  <span className="text-muted-foreground">Completion</span>
                  <span className="font-mono">{formatNumber(draft.completion_tokens ?? 0)}</span>
                </div>
                <div className="flex justify-between border-t pt-2 font-medium">
                  <span>Total</span>
                  <span className="font-mono">{formatNumber(totalTokens)}</span>
                </div>
              </CardContent>
            </Card>

            {draft.recommendation_id && (
              <Card>
                <CardHeader>
                  <CardTitle className="text-sm font-medium">Source Recommendation</CardTitle>
                </CardHeader>
                <CardContent className="space-y-2 text-sm">
                  <div>
                    <p className="text-xs text-muted-foreground">Action Type</p>
                    <p>{draft.recommendation_action_type?.replace(/_/g, ' ') ?? '—'}</p>
                  </div>
                  {draft.recommendation_page_url && (
                    <div>
                      <p className="text-xs text-muted-foreground">Page URL</p>
                      <p className="font-mono text-xs truncate" title={draft.recommendation_page_url}>
                        {draft.recommendation_page_url}
                      </p>
                    </div>
                  )}
                  {draft.recommendation_lifecycle_status && (
                    <div>
                      <p className="text-xs text-muted-foreground">Lifecycle Status</p>
                      <Badge variant="outline">{draft.recommendation_lifecycle_status}</Badge>
                    </div>
                  )}
                  <a
                    href={route('admin.recommendations.show', { recommendation: draft.recommendation_id })}
                    className="text-xs text-primary hover:underline block"
                  >
                    View recommendation →
                  </a>
                </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">Generated Content</CardTitle>
                </div>
              </CardHeader>
              <CardContent>
                {draft.content ? (
                  <div
                    className="prose prose-sm dark:prose-invert max-w-none"
                    dangerouslySetInnerHTML={{ __html: sanitizeHtml(draft.content) }}
                  />
                ) : (
                  <p className="text-sm text-muted-foreground">No content available.</p>
                )}
              </CardContent>
            </Card>
          </div>
        </div>
      </div>
    </AdminLayout>
  );
}
