import { ArrowLeft, ArrowRight, Clock, UserCheck } from 'lucide-react';

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

import { MetadataViewer } from '@/Components/admin/MetadataViewer';
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';
import type { AdminAuditLogShowProps } from '@/types/admin';

function formatDuration(raw: number): string {
  const seconds = Math.max(0, Math.floor(raw));
  if (seconds < 60) return `${seconds}s`;
  const minutes = Math.floor(seconds / 60);
  const remainingSeconds = seconds % 60;
  if (minutes < 60)
    return remainingSeconds > 0 ? `${minutes}m ${remainingSeconds}s` : `${minutes}m`;
  const hours = Math.floor(minutes / 60);
  const remainingMinutes = minutes % 60;
  return remainingMinutes > 0 ? `${hours}h ${remainingMinutes}m` : `${hours}h`;
}

export default function AdminAuditLogShow({
  auditLog,
  impersonation_session,
}: AdminAuditLogShowProps) {
  return (
    <AdminLayout>
      <Head title={`Admin - Audit Log #${auditLog.id}`} />

      <div className="container py-6 space-y-6">
        {/* Breadcrumb */}
        <Breadcrumb>
          <BreadcrumbList>
            <BreadcrumbItem>
              <BreadcrumbLink asChild>
                <Link href="/admin">Admin</Link>
              </BreadcrumbLink>
            </BreadcrumbItem>
            <BreadcrumbSeparator />
            <BreadcrumbItem>
              <BreadcrumbLink asChild>
                <Link href="/admin/audit-logs">Audit Logs</Link>
              </BreadcrumbLink>
            </BreadcrumbItem>
            <BreadcrumbSeparator />
            <BreadcrumbItem>
              <BreadcrumbPage>#{auditLog.id}</BreadcrumbPage>
            </BreadcrumbItem>
          </BreadcrumbList>
        </Breadcrumb>

        <PageHeader title={`Audit Log #${auditLog.id}`} />

        <Card>
          <CardHeader>
            <CardTitle>
              <Badge variant="secondary" className="text-sm">
                {auditLog.event}
              </Badge>
            </CardTitle>
          </CardHeader>
          <CardContent className="space-y-4">
            <div className="grid gap-4 md:grid-cols-2">
              <div>
                <p className="text-sm text-muted-foreground mb-1">User</p>
                <p className="text-sm">
                  {auditLog.user_name ? (
                    <Link href={`/admin/users/${auditLog.user_id}`} className="hover:underline">
                      {auditLog.user_name} ({auditLog.user_email})
                    </Link>
                  ) : (
                    <span className="text-muted-foreground">System</span>
                  )}
                </p>
              </div>
              <div>
                <p className="text-sm text-muted-foreground mb-1">IP Address</p>
                <p className="text-sm font-mono">{auditLog.ip ?? 'N/A'}</p>
              </div>
              <div>
                <p className="text-sm text-muted-foreground mb-1">Date</p>
                <p className="text-sm">{formatDateTime(auditLog.created_at)}</p>
              </div>
              <div>
                <p className="text-sm text-muted-foreground mb-1">User Agent</p>
                <p className="text-sm text-muted-foreground truncate">
                  {auditLog.user_agent ?? 'N/A'}
                </p>
              </div>
            </div>

            {auditLog.metadata && Object.keys(auditLog.metadata).length > 0 && (
              <MetadataViewer metadata={auditLog.metadata} />
            )}
          </CardContent>
        </Card>

        {auditLog.event === 'admin.impersonation_started' && (
          <Card>
            <CardHeader>
              <CardTitle className="flex items-center gap-2 text-base">
                <UserCheck className="h-4 w-4" />
                Impersonation Session
              </CardTitle>
            </CardHeader>
            <CardContent>
              {impersonation_session ? (
                <div className="space-y-2 text-sm">
                  <div className="flex items-center gap-2">
                    <Clock className="h-4 w-4 text-muted-foreground" />
                    <span>Duration: {formatDuration(impersonation_session.duration_seconds)}</span>
                  </div>
                  <p className="text-muted-foreground">
                    Stopped at: {formatDateTime(impersonation_session.stopped_at)}
                  </p>
                  <Button variant="outline" size="sm" asChild>
                    <Link href={`/admin/audit-logs/${impersonation_session.stopped_log_id}`}>
                      View stop event
                      <ArrowRight className="ml-1 h-3 w-3" />
                    </Link>
                  </Button>
                </div>
              ) : (
                <p className="text-sm text-muted-foreground">
                  Session still active or stop event not recorded
                </p>
              )}
            </CardContent>
          </Card>
        )}

        <Button variant="outline" asChild>
          <Link href="/admin/audit-logs">
            <ArrowLeft className="mr-2 h-4 w-4" />
            Back to Audit Logs
          </Link>
        </Button>
      </div>
    </AdminLayout>
  );
}
