import RegisterBannerCard from '@/components/register-banner-card';
import { Badge } from '@/components/ui/badge';
import { Button } from '@/components/ui/button';
import {
    Card,
    CardContent,
    CardDescription,
    CardHeader,
    CardTitle,
} from '@/components/ui/card';
import { Dialog, DialogContent } from '@/components/ui/dialog';
import { Separator } from '@/components/ui/separator';
import AppLayout from '@/layouts/app-layout';
import { cn } from '@/lib/utils';
import { index as verificationIndex } from '@/routes/verifications';
import { Accreditation, Auth, type BreadcrumbItem } from '@/types';
import { formatShortLatamDate } from '@/utils/dateFormat';
import { Head, usePage } from '@inertiajs/react';
import { useState } from 'react';
import VerifyModal from './verify-modal';
import { Owner, Animal, Team, Kennel, Business } from '@/types';

const breadcrumbs: BreadcrumbItem[] = [
    {
        title: 'Verificación de Perfiles',
        href: verificationIndex().url,
    },
];

interface Props {
    verification: Accreditation;
    profile: Owner | Animal | Team | Kennel | Business | null;
    auth: Auth;
    [key: string]: unknown;
}

export default function ProfileVerification() {
    const { verification, auth, profile } = usePage<Props>().props;
    const owner = verification.user?.owner;
    console.log('Profile Data:', profile);
    const isHomologacion = verification.type === 'homologacion';
    const isVerificacion = verification.type === 'verification';
    const perfilMap: Record<string, string> = {
        animal: 'Animal',
        owner: 'Dueño',
        kennel: 'Criadero',
        business: 'Negocio',
        team: 'Equipo',
    };
    const perfilLabel =
        perfilMap[verification.profile_type] || verification.profile_type;

    const bannerTitle = isHomologacion
        ? `¡Homologa el perfil de ${perfilLabel}!`
        : isVerificacion
          ? `¡Verifica el perfil de ${perfilLabel}!`
          : `¡Gestiona el perfil de ${perfilLabel}!`;

    const bannerDescription = isHomologacion
        ? `Gestiona y valida la homologación del perfil de tipo ${perfilLabel}.`
        : isVerificacion
          ? `Gestiona y valida la verificación del perfil de tipo ${perfilLabel}.`
          : `Gestiona y valida la información del perfil de tipo ${perfilLabel}.`;

    const bannerItems = isHomologacion
        ? [
              'Revisa solicitudes de homologación.',
              'Aprueba o rechaza homologaciones.',
              'Consulta el historial de homologaciones.',
          ]
        : [
              'Revisa solicitudes de verificación.',
              'Aprueba o rechaza verificaciones.',
              'Consulta el historial de verificaciones.',
          ];

    const bannerImg = isHomologacion
        ? 'https://cdn-icons-png.flaticon.com/512/456/456212.png'
        : 'https://cdn-icons-png.flaticon.com/512/456/456212.png';

    // Modal state
    const [openVerify, setOpenVerify] = useState(false);
    const [evidenceModalOpen, setEvidenceModalOpen] = useState(false);
    const [selectedEvidence, setSelectedEvidence] = useState<string | null>(null);

    const isImage = (url: string) => /\.(jpg|jpeg|png|gif|bmp|webp)$/i.test(url);

    return (
        <AppLayout breadcrumbs={breadcrumbs}>
            <Head title="Verificación de Perfiles" />
            <div className="flex h-full flex-1 flex-col gap-6 rounded-xl p-4">
                <RegisterBannerCard
                    img={owner?.photo || bannerImg}
                    title={bannerTitle}
                    description={bannerDescription}
                    items={bannerItems}
                />

                {verification && (
                    <>
                        {verification.status === 'pending' && (
                            <div className="mb-2 flex justify-end">
                                <Button
                                    variant="default"
                                    onClick={() => setOpenVerify(true)}
                                >
                                    Verificar
                                </Button>
                            </div>
                        )}

                        {/* Modal de verificación */}
                        <VerifyModal
                            open={openVerify}
                            setOpen={setOpenVerify}
                            accreditationId={verification.id ?? 0}
                            userId={auth.user.id}
                        />

                        <div className="grid grid-cols-3 gap-8">
                            {/* Información de Verificación */}
                            <Card>
                                <CardHeader>
                                    <CardTitle className="text-lg font-semibold">
                                        Información de Verificación
                                    </CardTitle>
                                    <CardDescription>
                                        Detalles principales del proceso.
                                    </CardDescription>
                                </CardHeader>
                                <CardContent className="text-sm">
                                    <div>
                                        <strong>Tipo:</strong>{' '}
                                        {isHomologacion
                                            ? 'Homologación'
                                            : isVerificacion
                                              ? 'Verificación'
                                              : verification.type}
                                    </div>
                                    <div>
                                        <strong>Perfil:</strong> {perfilLabel}
                                    </div>
                                    <div>
                                        <strong>Estado:</strong>{' '}
                                        <Badge
                                            variant="outline"
                                            className={cn(
                                                verification.status ===
                                                    'approved' &&
                                                    'border-green-300 bg-green-100 text-green-800',
                                                verification.status ===
                                                    'rejected' &&
                                                    'border-red-300 bg-red-100 text-red-800',
                                                verification.status ===
                                                    'pending' &&
                                                    'border-yellow-300 bg-yellow-100 text-yellow-800',
                                            )}
                                        >
                                            {verification.status === 'approved'
                                                ? 'Aprobado'
                                                : verification.status ===
                                                    'rejected'
                                                  ? 'Rechazado'
                                                  : verification.status ===
                                                      'pending'
                                                    ? 'Pendiente'
                                                    : verification.status}
                                        </Badge>
                                    </div>
                                    <div>
                                        <strong>Creado:</strong>{' '}
                                        {verification.created_at
                                            ? formatShortLatamDate(
                                                  verification.created_at,
                                              )
                                            : '-'}
                                    </div>
                                    <div>
                                        <strong>Detalle:</strong>
                                        <div className="mt-1 text-muted-foreground">
                                            {verification.detail ?? '-'}
                                        </div>
                                    </div>
                                </CardContent>
                            </Card>

                            {/* Datos del Usuario */}
                            <Card>
                                <CardHeader>
                                    <CardTitle className="text-lg font-semibold">
                                        Usuario
                                    </CardTitle>
                                    <CardDescription>
                                        Información básica asociada.
                                    </CardDescription>
                                </CardHeader>
                                <CardContent className="text-sm">
                                    <div>
                                        <b>Nombre:</b>{' '}
                                        {verification.user?.name ?? '-'}
                                    </div>
                                    <div>
                                        <b>Email:</b>{' '}
                                        {verification.user?.email ?? '-'}
                                    </div>
                                    <div>
                                        <b>Teléfono:</b>{' '}
                                        {verification.user?.phone ?? '-'}
                                    </div>
                                    <div>
                                        <b>Ciudad:</b>{' '}
                                        {verification.user?.city ?? '-'}
                                    </div>
                                    <div>
                                        <b>País:</b>{' '}
                                        {verification.user?.country ?? '-'}
                                    </div>
                                    <div>
                                        <b>Fecha nacimiento:</b>{' '}
                                        {verification.user?.birthdate
                                            ? formatShortLatamDate(
                                                  verification.user.birthdate,
                                              )
                                            : '-'}
                                    </div>
                                </CardContent>
                            </Card>

                            {/* Datos del Propietario / Perfil */}
                            {profile && (
                                <Card>
                                    <CardHeader>
                                        <CardTitle className="text-lg font-semibold">
                                            {perfilLabel}
                                        </CardTitle>
                                        <CardDescription>
                                            Información del perfil verificado.
                                        </CardDescription>
                                    </CardHeader>
                                    <CardContent className="text-sm">
                                        {/* Animal */}
                                        {verification.profile_type === 'animal' && profile && (
                                            <>
                                                <div>
                                                    <b>Nombre:</b> {(profile as Animal).name ?? '-'}
                                                </div>
                                                <div>
                                                    <b>Raza:</b> {(profile as Animal).breed?.name ?? '-'}
                                                </div>
                                                <div>
                                                    <b>Sexo:</b> {(profile as Animal).sex ?? '-'}
                                                </div>
                                                <div>
                                                    <b>Color:</b> {(profile as Animal).color ?? '-'}
                                                </div>
                                                <div>
                                                    <b>Fecha nacimiento:</b> {(profile as Animal).birth_date ? formatShortLatamDate((profile as Animal).birth_date) : '-'}
                                                </div>
                                            </>
                                        )}
                                        {/* Dueño */}
                                        {verification.profile_type === 'owner' && profile && (
                                            <>
                                                <div>
                                                    <b>Nombre:</b> {`${(profile as Owner).first_name ?? ''} ${(profile as Owner).last_name ?? ''}`.trim()}
                                                </div>
                                                <div>
                                                    <b>Documento:</b> {`${(profile as Owner).document_type?.toUpperCase() ?? '-'} | ${(profile as Owner).identity_document ?? '-'}`}
                                                </div>
                                                <div>
                                                    <b>Teléfono:</b> {(profile as Owner).phone ?? '-'}
                                                </div>
                                                <div>
                                                    <b>Dirección:</b> {(profile as Owner).address ?? '-'}
                                                </div>
                                                <div>
                                                    <b>Biografía:</b> {(profile as Owner).bio ?? '-'}
                                                </div>
                                            </>
                                        )}
                                        {/* Criadero */}
                                        {verification.profile_type === 'kennel' && profile && (
                                            <>
                                                <div>
                                                    <b>Nombre:</b> {(profile as Kennel).name ?? '-'}
                                                </div>
                                                <div>
                                                    <b>Ubicación:</b> {(profile as Kennel).location ?? '-'}
                                                </div>
                                                <div>
                                                    <b>Descripción:</b> {(profile as Kennel).description ?? '-'}
                                                </div>
                                                <div>
                                                    <b>Homologado:</b> {(profile as Kennel).homologated ? 'Sí' : 'No'}
                                                </div>
                                                <div>
                                                    <b>Registrado:</b> {(profile as Kennel).registered_at ? formatShortLatamDate((profile as Kennel).registered_at!) : '-'}
                                                </div>
                                                {/* Puedes agregar banner_url, shield_url, logo_url, social_networks si quieres mostrar imágenes o redes */}
                                            </>
                                        )}
                                        {/* Negocio */}
                                        {verification.profile_type === 'business' && profile && (
                                            <>
                                                <div>
                                                    <b>Nombre:</b> {(profile as Business).name ?? '-'}
                                                </div>
                                                <div>
                                                    <b>Tipo:</b> {(profile as Business).type ?? '-'}
                                                </div>
                                                <div>
                                                    <b>Descripción:</b> {(profile as Business).description ?? '-'}
                                                </div>
                                                <div>
                                                    <b>Dirección:</b> {(profile as Business).address ?? '-'}
                                                </div>
                                                <div>
                                                    <b>Teléfono:</b> {(profile as Business).phone ?? '-'}
                                                </div>
                                                <div>
                                                    <b>Homologado:</b> {(profile as Business).homologated ? 'Sí' : 'No'}
                                                </div>
                                                {/* Puedes agregar banner_url, shield_url, logo_url, social_networks, productos si quieres mostrar más */}
                                            </>
                                        )}
                                        {/* Equipo */}
                                        {verification.profile_type === 'team' && profile && (
                                            <>
                                                <div>
                                                    <b>Nombre:</b> {(profile as Team).name ?? '-'}
                                                </div>
                                                <div>
                                                    <b>Descripción:</b> {(profile as Team).description ?? '-'}
                                                </div>
                                                <div>
                                                    <b>Status:</b> {(profile as Team).status ?? '-'}
                                                </div>
                                                <div>
                                                    <b>Afijo:</b> {(profile as Team).affix ?? '-'}
                                                </div>
                                                <div>
                                                    <b>Homologado:</b> {(profile as Team).homologated ? 'Sí' : 'No'}
                                                </div>
                                                {/* Puedes agregar banner_url, shield_url, logo_url, social_networks si quieres mostrar más */}
                                            </>
                                        )}
                                    </CardContent>
                                </Card>
                            )}

                            {/* Separador y Documentos */}
                            <Separator className="col-span-3" />
                            {/* Card de Evidencia (Documentos de Verificación) */}
                            {(profile?.verification_documents ?? []).length > 0 && (
                                <Card className="col-span-3">
                                    <CardHeader>
                                        <CardTitle className="text-lg font-semibold">
                                            Documentos de Verificación
                                        </CardTitle>
                                        <CardDescription>
                                            Archivos presentados en el proceso.
                                        </CardDescription>
                                    </CardHeader>
                                    <CardContent className="flex flex-wrap gap-4">
                                        {profile.verification_documents.map(
                                            (doc: string, idx: number) => (
                                                <button
                                                    key={idx}
                                                    type="button"
                                                    className="focus:outline-none"
                                                    onClick={() => {
                                                        setSelectedEvidence(doc);
                                                        setEvidenceModalOpen(true);
                                                    }}
                                                >
                                                    {isImage(doc) ? (
                                                        <img
                                                            src={doc}
                                                            alt={`Documento ${idx + 1}`}
                                                            className="h-36 w-36 rounded-md border object-cover shadow-sm transition hover:scale-105"
                                                        />
                                                    ) : (
                                                        <div className="h-36 w-36 flex items-center justify-center rounded-md border bg-muted text-muted-foreground shadow-sm transition hover:scale-105">
                                                            <span className="text-xs">{doc.split('/').pop()}</span>
                                                        </div>
                                                    )}
                                                </button>
                                            ),
                                        )}
                                    </CardContent>
                                </Card>
                            )}

                            {/* Modal para ver evidencia */}
                            <Dialog open={evidenceModalOpen} onOpenChange={setEvidenceModalOpen}>
                                <DialogContent className="max-w-2xl">
                                    {selectedEvidence && (
                                        isImage(selectedEvidence) ? (
                                            <img
                                                src={selectedEvidence}
                                                alt="Evidencia"
                                                className="max-h-[70vh] w-auto mx-auto rounded"
                                            />
                                        ) : (
                                            <iframe
                                                src={selectedEvidence}
                                                title="Evidencia"
                                                className="w-full h-[70vh] rounded"
                                            />
                                        )
                                    )}
                                </DialogContent>
                            </Dialog>
                        </div>
                    </>
                )}
            </div>
        </AppLayout>
    );
}
