import { ArrowLeft } 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 { 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 GscConnectionDetail {
  id: number;
  site_id: number;
  site_name: string | null;
  site_domain: string | null;
  user_name: string | null;
  user_email: string | null;
  gsc_property_url: string;
  sync_status: string | null;
  last_synced_at: string | null;
  last_sync_failed_at: string | null;
  sync_error: string | null;
  last_sync_stage: string | null;
  failed_refresh_attempts: number;
  token_expires_at: string | null;
  backfilled_at: string | null;
  created_at: string;
}

interface Props {
  connection: GscConnectionDetail;
}

const SYNC_STATUS_VARIANTS: Record<string, 'default' | 'secondary' | 'success' | 'destructive' | 'warning' | 'outline'> = {
  synced: 'success',
  syncing: 'warning',
  pending: 'secondary',
  failed: 'destructive',
};

export default function AdminGscConnectionShow({ connection }: Props) {
  return (
    <AdminLayout>
      <Head title={`Admin - GSC Connection #${connection.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.gsc-connections.index')}>GSC Connections</Link>
              </BreadcrumbLink>
            </BreadcrumbItem>
            <BreadcrumbSeparator />
            <BreadcrumbItem>
              <BreadcrumbPage>#{connection.id}</BreadcrumbPage>
            </BreadcrumbItem>
          </BreadcrumbList>
        </Breadcrumb>

        <PageHeader
          title={`GSC Connection #${connection.id}`}
          subtitle={connection.gsc_property_url}
          actions={
            connection.sync_status ? (
              <Badge variant={SYNC_STATUS_VARIANTS[connection.sync_status] ?? 'secondary'}>
                {connection.sync_status}
              </Badge>
            ) : undefined
          }
        />

        <div className="grid gap-6 md:grid-cols-2">
          <Card>
            <CardHeader>
              <CardTitle className="text-sm font-medium">Site &amp; User</CardTitle>
            </CardHeader>
            <CardContent className="space-y-3 text-sm">
              <div>
                <p className="text-xs text-muted-foreground">Site</p>
                {connection.site_id ? (
                  <Link href={route('admin.sites.show', { site: connection.site_id })} className="text-primary hover:underline font-medium">
                    {connection.site_name ?? '—'}
                  </Link>
                ) : (
                  <p className="font-medium">{connection.site_name ?? '—'}</p>
                )}
                {connection.site_domain && (
                  <p className="text-xs text-muted-foreground">{connection.site_domain}</p>
                )}
              </div>
              <div>
                <p className="text-xs text-muted-foreground">User</p>
                <p className="font-medium">{connection.user_name ?? '—'}</p>
                {connection.user_email && (
                  <p className="text-xs text-muted-foreground">{connection.user_email}</p>
                )}
              </div>
              <div>
                <p className="text-xs text-muted-foreground">Connected</p>
                <p>{formatDateTime(connection.created_at)}</p>
              </div>
            </CardContent>
          </Card>

          <Card>
            <CardHeader>
              <CardTitle className="text-sm font-medium">Sync Status</CardTitle>
            </CardHeader>
            <CardContent className="space-y-3 text-sm">
              <div>
                <p className="text-xs text-muted-foreground">Last Synced</p>
                <p>{formatDateTime(connection.last_synced_at) || '—'}</p>
              </div>
              <div>
                <p className="text-xs text-muted-foreground">Last Sync Stage</p>
                <p className="font-mono">{connection.last_sync_stage ?? '—'}</p>
              </div>
              <div>
                <p className="text-xs text-muted-foreground">Backfilled At</p>
                <p>{formatDateTime(connection.backfilled_at) || '—'}</p>
              </div>
              <div>
                <p className="text-xs text-muted-foreground">Failed Refresh Attempts</p>
                <p className={connection.failed_refresh_attempts > 0 ? 'text-destructive font-medium' : ''}>
                  {connection.failed_refresh_attempts}
                </p>
              </div>
              <div>
                <p className="text-xs text-muted-foreground">Token Expires At</p>
                <p>{formatDateTime(connection.token_expires_at) || '—'}</p>
              </div>
            </CardContent>
          </Card>

          {(connection.sync_error || connection.last_sync_failed_at) && (
            <Card className="md:col-span-2 border-destructive/50">
              <CardHeader>
                <CardTitle className="text-sm font-medium text-destructive">Sync Error</CardTitle>
              </CardHeader>
              <CardContent className="space-y-2 text-sm">
                {connection.last_sync_failed_at && (
                  <div>
                    <p className="text-xs text-muted-foreground">Failed At</p>
                    <p>{formatDateTime(connection.last_sync_failed_at)}</p>
                  </div>
                )}
                {connection.sync_error && (
                  <div>
                    <p className="text-xs text-muted-foreground mb-1">Error</p>
                    <pre className="text-xs bg-muted p-3 rounded-md overflow-auto whitespace-pre-wrap break-all">
                      {connection.sync_error}
                    </pre>
                  </div>
                )}
              </CardContent>
            </Card>
          )}
        </div>

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