import { Badge } from '@/components/ui/badge';
import { Button } from '@/components/ui/button';
import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card';
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
import AppLayout from '@/layouts/app-layout';
import { Head, Link, usePage } from '@inertiajs/react';
import { ArrowLeft, Globe } from 'lucide-react';
import { ReactNode } from 'react';

declare const route: (...args: any[]) => string;

interface Language {
    id:         number;
    name:       string;
    code:       string;
    is_default: number;
}

interface AdmissionFormData {
    id:  number;
    uid: string;
    // Raw JSON objects — all locales
    title:       Record<string, string>;
    slug:        Record<string, string>;
    description: Record<string, string>;
    // Resolved display strings — active locale
    display_title:       string;
    display_slug:        string;
    display_description: string;
    // Non-translatable
    institute_class_id:    number | null;
    institute_class_title: string | null;
    media_id?:  number;
    media_url?: string | null;
    media?:     { url?: string; name?: string };
    status:     number;
    created_at: string;
    updated_at: string;
}

interface ShowProps {
    admissionForm: AdmissionFormData;
    languages:     Language[];
    [key: string]: unknown;
}

function DetailRow({ label, value }: { label: string; value: ReactNode }) {
    if (value === null || value === undefined || value === '') return null;
    return (
        <div className="flex flex-col gap-1 border-b py-3 last:border-b-0 sm:flex-row sm:items-start">
            <span className="w-44 shrink-0 text-sm font-medium text-gray-500">{label}</span>
            <span className="text-sm text-gray-900">{value}</span>
        </div>
    );
}

/** Strip HTML tags + &nbsp; and trim — safe for plain-text display */
function plainText(html: string): string {
    return html.replace(/<[^>]*>/g, '').replace(/&nbsp;/g, ' ').trim();
}

/** Locale badge — uppercase code, green if has content, gray if empty */
function LocaleBadge({ code, filled }: { code: string; filled: boolean }) {
    return (
        <span
            className={`inline-flex items-center rounded px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide ${
                filled ? 'bg-green-100 text-green-700' : 'bg-gray-100 text-gray-400'
            }`}
        >
            {code}
        </span>
    );
}

function Show() {
    const { admissionForm, languages, current_locale } = usePage<ShowProps>().props as any;

    const statusLabel = admissionForm.status === 1 ? 'Active' : 'Inactive';
    const statusColor =
        admissionForm.status === 1
            ? 'border-green-500 bg-green-50 text-green-700'
            : 'border-gray-400 bg-gray-50 text-gray-600';

    const defaultLocale =
        current_locale ??
        languages.find((l: any) => l.is_default)?.code ??
        languages[0]?.code ??
        'us';

    // Only render tabs for locales that have at least a title value
    const filledLocales = languages.filter((l: Language) => !!admissionForm.title?.[l.code]);
    const tabLocales    = filledLocales.length > 0 ? filledLocales : languages;

    return (
        <>
            <Head title={`Admission Form - ${admissionForm.display_title}`} />
            <div className="no-scrollbar rounded-xl p-2">
                {/* Header */}
                <div className="mb-6 flex flex-col items-start justify-between gap-4 sm:flex-row sm:items-center">
                    <div className="grid grid-cols-1 gap-1">
                        <h2 className="text-xl font-bold sm:text-2xl">{admissionForm.display_title}</h2>
                        <div className="flex items-center text-sm text-gray-600">
                            <Link href={route('admission-form.index')} className="hover:underline">
                                Admission Form Management
                            </Link>
                            <span className="mx-2">›</span>
                            <span>Admission Form Details</span>
                        </div>
                    </div>
                    <div className="flex gap-2">
                        <Button variant="outline" size="sm" asChild>
                            <Link href={route('admission-form.index')}>
                                <ArrowLeft className="mr-2 h-4 w-4" />
                                Back to List
                            </Link>
                        </Button>
                    </div>
                </div>

                <div className="grid grid-cols-1 gap-6 lg:grid-cols-3">
                    {/* ── Main column ── */}
                    <div className="space-y-6 lg:col-span-2">

                        {/* Multi-language content card */}
                        <Card>
                            <CardHeader className="border-b">
                                <div className="flex items-center justify-between">
                                    <div className="flex items-center gap-2">
                                        <Globe className="h-4 w-4 text-gray-500" />
                                        <CardTitle className="text-lg font-semibold">
                                            Multi-Language Content
                                        </CardTitle>
                                    </div>
                                    {/* Locale coverage badges */}
                                    <div className="flex items-center gap-1">
                                        {languages.map((lang: Language) => (
                                            <LocaleBadge
                                                key={lang.code}
                                                code={lang.code}
                                                filled={!!admissionForm.title?.[lang.code]}
                                            />
                                        ))}
                                    </div>
                                </div>
                            </CardHeader>
                            <CardContent className="pt-4">
                                <Tabs defaultValue={defaultLocale}>
                                    <TabsList className="mb-4 flex flex-wrap gap-1">
                                        {tabLocales.map((lang: Language) => (
                                            <TabsTrigger key={lang.code} value={lang.code} className="gap-1.5">
                                                {lang.name}
                                                {lang.is_default ? (
                                                    <span className="rounded bg-blue-100 px-1 text-[10px] text-blue-600">
                                                        default
                                                    </span>
                                                ) : null}
                                            </TabsTrigger>
                                        ))}
                                    </TabsList>

                                    {tabLocales.map((lang: Language) => {
                                        const title       = admissionForm.title?.[lang.code]       ?? '';
                                        const slug        = admissionForm.slug?.[lang.code]        ?? '';
                                        const description = admissionForm.description?.[lang.code] ?? '';
                                        const plain       = description ? plainText(description) : '';

                                        return (
                                            <TabsContent key={lang.code} value={lang.code}>
                                                <div className="space-y-0">
                                                    <DetailRow label="Title" value={title || <span className="italic text-gray-400">—</span>} />
                                                    <DetailRow label="Slug"  value={slug  || <span className="italic text-gray-400">—</span>} />
                                                    <DetailRow
                                                        label="Description"
                                                        value={
                                                            plain ? (
                                                                <div className="break-words whitespace-pre-wrap leading-relaxed">
                                                                    {plain}
                                                                </div>
                                                            ) : (
                                                                <span className="italic text-gray-400">—</span>
                                                            )
                                                        }
                                                    />
                                                </div>
                                            </TabsContent>
                                        );
                                    })}
                                </Tabs>
                            </CardContent>
                        </Card>

                        {/* Admission Form details */}
                        <Card>
                            <CardHeader className="border-b">
                                <CardTitle className="text-lg font-semibold">Admission Form Information</CardTitle>
                            </CardHeader>
                            <CardContent className="pt-4">
                                {(admissionForm.media_url || admissionForm.media?.url) && (
                                    <DetailRow
                                        label="Media"
                                        value={
                                            <a
                                                href={admissionForm.media_url ?? admissionForm.media?.url}
                                                target="_blank"
                                                rel="noopener noreferrer"
                                                className="text-blue-600 hover:underline"
                                            >
                                                {admissionForm.media?.name ?? 'View Media'}
                                            </a>
                                        }
                                    />
                                )}
                            </CardContent>
                        </Card>
                    </div>

                    {/* ── Sidebar ── */}
                    <div className="space-y-6">
                        {/* Status */}
                        <Card>
                            <CardHeader className="border-b">
                                <CardTitle className="text-lg font-semibold">Status</CardTitle>
                            </CardHeader>
                            <CardContent className="pt-4">
                                <Badge className={`border ${statusColor}`}>{statusLabel}</Badge>
                            </CardContent>
                        </Card>

                        {/* Academic Info */}
                        <Card>
                            <CardHeader className="border-b">
                                <CardTitle className="text-lg font-semibold">Academic Details</CardTitle>
                            </CardHeader>
                            <CardContent className="pt-4">
                                <DetailRow label="Class" value={admissionForm.institute_class_title} />
                            </CardContent>
                        </Card>

                        {/* Timestamps */}
                        <Card>
                            <CardHeader className="border-b">
                                <CardTitle className="text-lg font-semibold">Timestamps</CardTitle>
                            </CardHeader>
                            <CardContent className="pt-4">
                                <DetailRow label="Created At" value={new Date(admissionForm.created_at).toLocaleString()} />
                                <DetailRow label="Updated At" value={new Date(admissionForm.updated_at).toLocaleString()} />
                            </CardContent>
                        </Card>
                    </div>
                </div>
            </div>
        </>
    );
}

Show.layout = (page: ReactNode) => (
    <AppLayout
        breadcrumbs={[
            { title: 'Home', href: '/' },
            { title: 'Admission Forms', href: route('admission-form.index') },
            { title: 'Admission Form Details', href: '#' },
        ]}
        title="Admission Form Details"
    >
        {page}
    </AppLayout>
);

export default Show;
