import { Head, Link, useForm } from '@inertiajs/react';
import { ArrowLeft, FileText, Plus, Trash2 } from 'lucide-react';
import * as React from 'react';
import { toast } from 'sonner';
import { TemplatePreview } from '@/components/template-preview';
import { Button } from '@/components/ui/button';
import {
    Card,
    CardContent,
    CardDescription,
    CardHeader,
    CardTitle,
} from '@/components/ui/card';
import { Input } from '@/components/ui/input';
import { Label } from '@/components/ui/label';
import {
    Select,
    SelectContent,
    SelectItem,
    SelectTrigger,
    SelectValue,
} from '@/components/ui/select';
import { Textarea } from '@/components/ui/textarea';

interface WabaAccount {
    id: number;
    phone_number: string;
    display_name: string | null;
    waba_id: string;
}

const WHATSAPP_LANGUAGES = [
    { code: 'af', name: 'Afrikaans (af)' },
    { code: 'sq', name: 'Albanian (sq)' },
    { code: 'ar', name: 'Arabic (ar)' },
    { code: 'az', name: 'Azerbaijani (az)' },
    { code: 'bn', name: 'Bengali (bn)' },
    { code: 'bg', name: 'Bulgarian (bg)' },
    { code: 'ca', name: 'Catalan (ca)' },
    { code: 'zh_CN', name: 'Chinese (Simplified) (zh_CN)' },
    { code: 'zh_HK', name: 'Chinese (Hong Kong) (zh_HK)' },
    { code: 'zh_TW', name: 'Chinese (Traditional) (zh_TW)' },
    { code: 'hr', name: 'Croatian (hr)' },
    { code: 'cs', name: 'Czech (cs)' },
    { code: 'da', name: 'Danish (da)' },
    { code: 'nl', name: 'Dutch (nl)' },
    { code: 'en', name: 'English (en)' },
    { code: 'en_GB', name: 'English (UK) (en_GB)' },
    { code: 'en_US', name: 'English (US) (en_US)' },
    { code: 'et', name: 'Estonian (et)' },
    { code: 'fil', name: 'Filipino (fil)' },
    { code: 'fi', name: 'Finnish (fi)' },
    { code: 'fr', name: 'French (fr)' },
    { code: 'ka', name: 'Georgian (ka)' },
    { code: 'de', name: 'German (de)' },
    { code: 'el', name: 'Greek (el)' },
    { code: 'gu', name: 'Gujarati (gu)' },
    { code: 'he', name: 'Hebrew (he)' },
    { code: 'hi', name: 'Hindi (hi)' },
    { code: 'hu', name: 'Hungarian (hu)' },
    { code: 'id', name: 'Indonesian (id)' },
    { code: 'ga', name: 'Irish (ga)' },
    { code: 'it', name: 'Italian (it)' },
    { code: 'ja', name: 'Japanese (ja)' },
    { code: 'kn', name: 'Kannada (kn)' },
    { code: 'kk', name: 'Kazakh (kk)' },
    { code: 'ko', name: 'Korean (ko)' },
    { code: 'lv', name: 'Latvian (lv)' },
    { code: 'lt', name: 'Lithuanian (lt)' },
    { code: 'mk', name: 'Macedonian (mk)' },
    { code: 'ms', name: 'Malay (ms)' },
    { code: 'ml', name: 'Malayalam (ml)' },
    { code: 'mr', name: 'Marathi (mr)' },
    { code: 'nb', name: 'Norwegian (nb)' },
    { code: 'fa', name: 'Persian (fa)' },
    { code: 'pl', name: 'Polish (pl)' },
    { code: 'pt_BR', name: 'Portuguese (Brazil) (pt_BR)' },
    { code: 'pt_PT', name: 'Portuguese (Portugal) (pt_PT)' },
    { code: 'pa', name: 'Punjabi (pa)' },
    { code: 'ro', name: 'Romanian (ro)' },
    { code: 'ru', name: 'Russian (ru)' },
    { code: 'sr', name: 'Serbian (sr)' },
    { code: 'sk', name: 'Slovak (sk)' },
    { code: 'sl', name: 'Slovenian (sl)' },
    { code: 'es', name: 'Spanish (es)' },
    { code: 'es_AR', name: 'Spanish (Argentina) (es_AR)' },
    { code: 'es_ES', name: 'Spanish (Spain) (es_ES)' },
    { code: 'es_MX', name: 'Spanish (Mexico) (es_MX)' },
    { code: 'sw', name: 'Swahili (sw)' },
    { code: 'sv', name: 'Swedish (sv)' },
    { code: 'ta', name: 'Tamil (ta)' },
    { code: 'te', name: 'Telugu (te)' },
    { code: 'th', name: 'Thai (th)' },
    { code: 'tr', name: 'Turkish (tr)' },
    { code: 'uk', name: 'Ukrainian (uk)' },
    { code: 'ur', name: 'Urdu (ur)' },
    { code: 'uz', name: 'Uzbek (uz)' },
    { code: 'vi', name: 'Vietnamese (vi)' },
    { code: 'zu', name: 'Zulu (zu)' },
];

interface TemplateCreateProps {
    accounts: WabaAccount[];
}

interface ButtonItem {
    type: 'QUICK_REPLY' | 'PHONE_NUMBER' | 'URL';
    text: string;
    phone_number?: string;
    url?: string;
}

export default function TemplateCreate({ accounts }: TemplateCreateProps) {
    const [headerType, setHeaderType] = React.useState<'TEXT' | 'NONE'>('NONE');
    const [headerText, setHeaderText] = React.useState('');
    const [bodyText, setBodyText] = React.useState('');
    const [footerText, setFooterText] = React.useState('');
    const [buttons, setButtons] = React.useState<ButtonItem[]>([]);
    const [sampleVariables, setSampleVariables] = React.useState<Record<string, string>>({});

    const detectedBodyVariables = React.useMemo(() => {
        const matches = bodyText.match(/\{\{\s*([^}]+)\s*\}\}/g);
        if (!matches) return [];
        const vars = matches.map((m) => m.replace(/^\{\{\s*|\s*\}\}$/g, '').trim());
        return Array.from(new Set(vars)).filter(Boolean);
    }, [bodyText]);

    const { data, setData, post, processing, errors } = useForm({
        whatsapp_account_id: accounts.length > 0 ? String(accounts[0].id) : '',
        name: '',
        language: 'en',
        category: 'MARKETING',
        components: [] as any[],
    });

    const handleAddButton = () => {
        if (buttons.length >= 10) {
            toast.error('Template WhatsApp mendukung maksimal 10 tombol.');

            return;
        }

        setButtons([...buttons, { type: 'QUICK_REPLY', text: '' }]);
    };

    const handleRemoveButton = (index: number) => {
        setButtons(buttons.filter((_, idx) => idx !== index));
    };

    const handleButtonChange = (
        index: number,
        key: keyof ButtonItem,
        val: string,
    ) => {
        const updated = [...buttons];
        updated[index] = { ...updated[index], [key]: val };
        setButtons(updated);
    };

    const [submittingWithComponents, setSubmittingWithComponents] =
        React.useState<any[] | null>(null);

    React.useEffect(() => {
        if (submittingWithComponents !== null) {
            setData('components', submittingWithComponents);
        }
    }, [submittingWithComponents, setData]);

    React.useEffect(() => {
        if (
            submittingWithComponents !== null &&
            data.components === submittingWithComponents
        ) {
            post('/dashboard/templates', {
                onSuccess: () => {
                    toast.success('Template berhasil diajukan ke Meta!');
                    setSubmittingWithComponents(null);
                },
                onError: (err) => {
                    setSubmittingWithComponents(null);

                    if (err.name) {
                        toast.error(err.name);
                    }

                    if (err.components) {
                        toast.error(
                            'Gagal memvalidasi struktur komponen template.',
                        );
                    }
                },
            });
        }
    }, [data.components, submittingWithComponents, post]);

    const handleFormSubmit = (e: React.FormEvent) => {
        e.preventDefault();

        // Validate template name
        const snakeCaseRegex = /^[a-z0-9_]+$/;

        if (!snakeCaseRegex.test(data.name)) {
            toast.error(
                'Nama template harus berformat huruf_kecil_dan_garis_bawah (hanya huruf kecil, angka, dan garis bawah).',
            );

            return;
        }

        // Build Meta Components Array
        const componentsArray: any[] = [];

        if (headerType === 'TEXT' && headerText.trim()) {
            componentsArray.push({
                type: 'HEADER',
                format: 'TEXT',
                text: headerText.trim(),
            });
        }

        if (!bodyText.trim()) {
            toast.error('Isi pesan (body) template wajib diisi.');

            return;
        }

        const bodyComp: any = {
            type: 'BODY',
            text: bodyText.trim(),
        };

        if (detectedBodyVariables.length > 0) {
            const samples = detectedBodyVariables.map(
                (v) => sampleVariables[v]?.trim() || `Contoh_${v}`,
            );
            bodyComp.example = {
                body_text: [samples],
            };
        }

        componentsArray.push(bodyComp);

        if (footerText.trim()) {
            componentsArray.push({
                type: 'FOOTER',
                text: footerText.trim(),
            });
        }

        if (buttons.length > 0) {
            // Check button validation
            const hasEmptyText = buttons.some((btn) => !btn.text.trim());

            if (hasEmptyText) {
                toast.error('Silakan isi teks label untuk semua tombol.');

                return;
            }

            try {
                const formattedButtons = buttons.map((btn) => {
                    const b: any = {
                        type: btn.type,
                        text: btn.text.trim(),
                    };

                    if (btn.type === 'PHONE_NUMBER') {
                        b.phone_number = btn.phone_number?.trim();
                    } else if (btn.type === 'URL') {
                        b.url = btn.url?.trim();
                    }

                    return b;
                });

                componentsArray.push({
                    type: 'BUTTONS',
                    buttons: formattedButtons,
                });
            } catch {
                return;
            }
        }

        // Put components in form data and trigger async submit
        setSubmittingWithComponents(componentsArray);
    };

    return (
        <>
            <Head title="Buat Template" />
            <div className="flex flex-col gap-6 text-left">
                {/* Back Link */}
                <div className="flex items-center">
                    <Button variant="ghost" size="sm" asChild className="-ml-2">
                        <Link
                            href="/dashboard/templates"
                            className="inline-flex items-center gap-1"
                        >
                            <ArrowLeft className="h-4 w-4" />
                            <span>Kembali ke Template</span>
                        </Link>
                    </Button>
                </div>

                <div>
                    <h1 className="text-2xl font-bold tracking-tight">
                        Buat Template WhatsApp
                    </h1>
                    <p className="text-sm text-muted-foreground">
                        Rancang template pesan WhatsApp resmi. Semua template akan diajukan ke Meta untuk ditinjau dan disetujui.
                    </p>
                </div>

                <div className="grid items-start gap-6 lg:grid-cols-5">
                    {/* Form Input Card */}
                    <Card className="lg:col-span-3">
                        <CardHeader>
                            <div className="flex items-center gap-2">
                                <FileText className="h-5 w-5 text-emerald-600" />
                                <CardTitle>Penyusun Template</CardTitle>
                            </div>
                            <CardDescription>
                                Susun header, isi pesan teks, variabel khusus, dan tombol tindakan interaktif.
                            </CardDescription>
                        </CardHeader>
                        <CardContent>
                            <form
                                onSubmit={handleFormSubmit}
                                className="space-y-6"
                            >
                                {/* Basic Meta Details */}
                                <div className="grid gap-4 md:grid-cols-2">
                                    <div className="flex flex-col gap-1.5">
                                        <Label htmlFor="whatsapp_account_id">
                                            Nomor Pengirim
                                        </Label>
                                        <Select
                                            value={data.whatsapp_account_id}
                                            onValueChange={(val) =>
                                                setData(
                                                    'whatsapp_account_id',
                                                    val,
                                                )
                                            }
                                        >
                                            <SelectTrigger>
                                                <SelectValue placeholder="Pilih Nomor WhatsApp" />
                                            </SelectTrigger>
                                            <SelectContent>
                                                {accounts.map((acc) => (
                                                    <SelectItem
                                                        key={acc.id}
                                                        value={String(acc.id)}
                                                    >
                                                        {acc.display_name
                                                            ? `${acc.display_name} (${acc.phone_number})`
                                                            : acc.phone_number}
                                                    </SelectItem>
                                                ))}
                                            </SelectContent>
                                        </Select>
                                        {errors.whatsapp_account_id && (
                                            <span className="text-xs text-rose-500">
                                                {errors.whatsapp_account_id}
                                            </span>
                                        )}
                                    </div>

                                    <div className="flex flex-col gap-1.5">
                                        <Label htmlFor="category">
                                            Kategori
                                        </Label>
                                        <Select
                                            value={data.category}
                                            onValueChange={(val) =>
                                                setData('category', val)
                                            }
                                        >
                                            <SelectTrigger>
                                                <SelectValue placeholder="Pilih Kategori" />
                                            </SelectTrigger>
                                            <SelectContent>
                                                <SelectItem value="MARKETING">
                                                    Pemasaran (Marketing / Promo)
                                                </SelectItem>
                                                <SelectItem value="UTILITY">
                                                    Utilitas (Utility / Transaksi / OTP)
                                                </SelectItem>
                                                <SelectItem value="AUTHENTICATION">
                                                    Autentikasi (Kode Keamanan Login)
                                                </SelectItem>
                                            </SelectContent>
                                        </Select>
                                    </div>
                                </div>

                                <div className="grid gap-4 md:grid-cols-2">
                                    <div className="flex flex-col gap-1.5">
                                        <Label htmlFor="name">
                                            Nama Template (huruf_kecil_dan_garis_bawah)
                                        </Label>
                                        <Input
                                            id="name"
                                            value={data.name}
                                            onChange={(e) =>
                                                setData(
                                                    'name',
                                                    e.target.value
                                                        .toLowerCase()
                                                        .replace(/\s+/g, '_'),
                                                )
                                            }
                                            placeholder="contoh: konfirmasi_pesanan_baru"
                                            required
                                        />
                                        <span className="text-[10px] text-muted-foreground">
                                            Hanya huruf kecil, angka, dan garis bawah yang diperbolehkan.
                                        </span>
                                        {errors.name && (
                                            <span className="text-xs text-rose-500">
                                                {errors.name}
                                            </span>
                                        )}
                                    </div>

                                    <div className="flex flex-col gap-1.5">
                                        <Label htmlFor="language">
                                            Bahasa
                                        </Label>
                                        <Select
                                            value={data.language}
                                            onValueChange={(val) =>
                                                setData('language', val)
                                            }
                                        >
                                            <SelectTrigger>
                                                <SelectValue placeholder="Pilih Bahasa" />
                                            </SelectTrigger>
                                            <SelectContent className="max-h-[250px] overflow-y-auto">
                                                {WHATSAPP_LANGUAGES.map(
                                                    (lang) => (
                                                        <SelectItem
                                                            key={lang.code}
                                                            value={lang.code}
                                                        >
                                                            {lang.name}
                                                        </SelectItem>
                                                    ),
                                                )}
                                            </SelectContent>
                                        </Select>
                                    </div>
                                </div>

                                {/* Header section */}
                                <div className="space-y-3 border-t pt-4">
                                    <div className="flex items-center justify-between">
                                        <h3 className="text-sm font-semibold">
                                            Header (Opsional)
                                        </h3>
                                        <Select
                                            value={headerType}
                                            onValueChange={(val: any) => {
                                                setHeaderType(val);

                                                if (val === 'NONE') {
                                                    setHeaderText('');
                                                }
                                            }}
                                        >
                                            <SelectTrigger className="h-8 w-[120px] text-xs">
                                                <SelectValue placeholder="Tipe Header" />
                                            </SelectTrigger>
                                            <SelectContent>
                                                <SelectItem value="NONE">
                                                    Tidak Ada
                                                </SelectItem>
                                                <SelectItem value="TEXT">
                                                    Teks
                                                </SelectItem>
                                            </SelectContent>
                                        </Select>
                                    </div>

                                    {headerType === 'TEXT' && (
                                        <div className="flex flex-col gap-1.5">
                                            <Label htmlFor="header_text">
                                                Teks Header
                                            </Label>
                                            <Input
                                                id="header_text"
                                                value={headerText}
                                                onChange={(e) =>
                                                    setHeaderText(
                                                        e.target.value,
                                                    )
                                                }
                                                placeholder="contoh: Informasi Status Pesanan"
                                                maxLength={60}
                                            />
                                            <span className="text-right text-[10px] text-muted-foreground">
                                                {headerText.length}/60
                                                karakter. Mendukung satu
                                                variabel (misal `{'{{1}}'}`).
                                            </span>
                                        </div>
                                    )}
                                </div>

                                {/* Body Section */}
                                <div className="space-y-3 border-t pt-4">
                                    <h3 className="text-sm font-semibold">
                                        Isi Pesan / Body (Wajib)
                                    </h3>
                                    <div className="flex flex-col gap-1.5">
                                        <Label htmlFor="body_text">
                                            Teks Isi Pesan
                                        </Label>
                                        <Textarea
                                            id="body_text"
                                            rows={4}
                                            value={bodyText}
                                            onChange={(e) =>
                                                setBodyText(e.target.value)
                                            }
                                            placeholder="Halo {{1}}, pesanan nomor #{{2}} Anda berhasil diproses dan siap dikirim!"
                                            maxLength={1024}
                                            required
                                        />
                                        <div className="flex justify-between text-[10px] text-muted-foreground">
                                            <span>
                                                Gunakan tanda kurung kurawal ganda seperti `{'{{1}}'}` atau `{'{{2}}'}` untuk variabel dinamis.
                                            </span>
                                            <span>
                                                {bodyText.length}/1024
                                                karakter
                                            </span>
                                        </div>

                                        <div className="mt-2 space-y-2 rounded-lg border bg-muted/40 p-3">
                                            <div className="flex flex-col gap-0.5">
                                                <Label className="text-xs font-semibold flex items-center justify-between">
                                                    <span>Sampel Variabel (Diperlukan oleh Meta)</span>
                                                    {detectedBodyVariables.length > 0 && (
                                                        <span className="text-[10px] text-emerald-600 dark:text-emerald-400 font-normal">
                                                            {detectedBodyVariables.length} variabel terdeteksi
                                                        </span>
                                                    )}
                                                </Label>
                                                <p className="text-[11px] text-muted-foreground">
                                                    Masukkan contoh nilai untuk setiap variabel agar Meta dapat meninjau template Anda. Sampel ini hanya untuk peninjauan dan tidak dikirimkan ke pelanggan.
                                                </p>
                                            </div>

                                            {detectedBodyVariables.length > 0 ? (
                                                <div className="grid gap-2 sm:grid-cols-2 pt-1">
                                                    {detectedBodyVariables.map((v) => (
                                                        <div key={v} className="flex flex-col gap-1">
                                                            <Label className="text-[11px] font-mono text-muted-foreground">
                                                                Masukkan konten untuk {`{{${v}}}`}
                                                            </Label>
                                                            <Input
                                                                value={sampleVariables[v] || ''}
                                                                onChange={(e) =>
                                                                    setSampleVariables({
                                                                        ...sampleVariables,
                                                                        [v]: e.target.value,
                                                                    })
                                                                }
                                                                placeholder={v === '1' ? 'contoh: Budi' : v === '2' ? 'contoh: PT Maju Bersama' : `contoh sampel {{${v}}}`}
                                                                className="h-8 text-xs bg-background"
                                                            />
                                                        </div>
                                                    ))}
                                                </div>
                                            ) : (
                                                <div className="rounded border border-dashed p-2 text-center text-[11px] text-muted-foreground">
                                                    Belum ada variabel dinamis. Ketik <code className="font-mono bg-muted px-1 rounded">{'{{1}}'}</code> atau <code className="font-mono bg-muted px-1 rounded">{'{{2}}'}</code> di dalam teks isi pesan untuk menambahkan sampel.
                                                </div>
                                            )}
                                        </div>
                                    </div>
                                </div>

                                {/* Footer section */}
                                <div className="space-y-3 border-t pt-4">
                                    <h3 className="text-sm font-semibold">
                                        Footer / Kaki Pesan (Opsional)
                                    </h3>
                                    <div className="flex flex-col gap-1.5">
                                        <Label htmlFor="footer_text">
                                            Teks Footer
                                        </Label>
                                        <Input
                                            id="footer_text"
                                            value={footerText}
                                            onChange={(e) =>
                                                setFooterText(e.target.value)
                                            }
                                            placeholder="contoh: Balas STOP untuk berhenti berlangganan"
                                            maxLength={60}
                                        />
                                        <span className="text-right text-[10px] text-muted-foreground">
                                            {footerText.length}/60 karakter.
                                            Teks akan tampil berwarna abu-abu redup di bawah pesan.
                                        </span>
                                    </div>
                                </div>

                                {/* Buttons section */}
                                <div className="space-y-3 border-t pt-4">
                                    <div className="flex items-center justify-between">
                                        <h3 className="text-sm font-semibold">
                                            Tombol Aksi (Opsional)
                                        </h3>
                                        <Button
                                            type="button"
                                            variant="outline"
                                            size="sm"
                                            onClick={handleAddButton}
                                            className="h-8 gap-1 text-xs"
                                        >
                                            <Plus className="h-3 w-3" />
                                            <span>Tambah Tombol</span>
                                        </Button>
                                    </div>

                                    {buttons.length > 0 && (
                                        <div className="space-y-3">
                                            {buttons.map((btn, index) => (
                                                <div
                                                    key={index}
                                                    className="relative flex flex-col gap-3 rounded-lg border bg-muted/20 p-3"
                                                >
                                                    <Button
                                                        type="button"
                                                        variant="ghost"
                                                        size="icon"
                                                        className="absolute top-2 right-2 h-7 w-7 text-muted-foreground hover:text-rose-600"
                                                        onClick={() =>
                                                            handleRemoveButton(
                                                                index,
                                                            )
                                                        }
                                                    >
                                                        <Trash2 className="h-4 w-4" />
                                                    </Button>

                                                    <div className="grid gap-3 md:grid-cols-3">
                                                        <div className="flex flex-col gap-1.5">
                                                            <Label>Tipe Tombol</Label>
                                                            <Select
                                                                value={btn.type}
                                                                onValueChange={(
                                                                    val: any,
                                                                ) =>
                                                                    handleButtonChange(
                                                                        index,
                                                                        'type',
                                                                        val,
                                                                    )
                                                                }
                                                            >
                                                                <SelectTrigger className="h-8 text-xs">
                                                                    <SelectValue />
                                                                </SelectTrigger>
                                                                <SelectContent>
                                                                    <SelectItem value="QUICK_REPLY">
                                                                        Balasan Cepat (Quick Reply)
                                                                    </SelectItem>
                                                                    <SelectItem value="PHONE_NUMBER">
                                                                        Telepon Nomor
                                                                    </SelectItem>
                                                                    <SelectItem value="URL">
                                                                        Kunjungi URL / Tautan
                                                                    </SelectItem>
                                                                </SelectContent>
                                                            </Select>
                                                        </div>
                                                        <div className="flex flex-col gap-1.5 md:col-span-2">
                                                            <Label>
                                                                Teks Label Tombol
                                                            </Label>
                                                            <Input
                                                                value={btn.text}
                                                                onChange={(e) =>
                                                                    handleButtonChange(
                                                                        index,
                                                                        'text',
                                                                        e.target
                                                                            .value,
                                                                    )
                                                                }
                                                                placeholder="contoh: Hubungi Dukungan"
                                                                className="h-8 text-xs"
                                                                maxLength={25}
                                                                required
                                                            />
                                                        </div>
                                                    </div>

                                                    {btn.type ===
                                                        'PHONE_NUMBER' && (
                                                        <div className="flex flex-col gap-1.5">
                                                            <Label>
                                                                Nomor Telepon (Format E.164)
                                                            </Label>
                                                            <Input
                                                                value={
                                                                    btn.phone_number ||
                                                                    ''
                                                                }
                                                                onChange={(e) =>
                                                                    handleButtonChange(
                                                                        index,
                                                                        'phone_number',
                                                                        e.target
                                                                            .value,
                                                                    )
                                                                }
                                                                placeholder="contoh: +6281234567890"
                                                                className="h-8 font-mono text-xs"
                                                                required
                                                            />
                                                        </div>
                                                    )}

                                                    {btn.type === 'URL' && (
                                                        <div className="flex flex-col gap-1.5">
                                                            <Label>
                                                                Alamat URL Tujuan
                                                            </Label>
                                                            <Input
                                                                value={
                                                                    btn.url ||
                                                                    ''
                                                                }
                                                                onChange={(e) =>
                                                                    handleButtonChange(
                                                                        index,
                                                                        'url',
                                                                        e.target
                                                                            .value,
                                                                    )
                                                                }
                                                                placeholder="contoh: https://natagara.com/orders"
                                                            />
                                                        </div>
                                                    )}
                                                </div>
                                            ))}
                                        </div>
                                    )}
                                </div>

                                <div className="flex justify-end gap-2 border-t pt-4">
                                    <Button variant="outline" asChild>
                                        <Link href="/dashboard/templates">
                                            Batal
                                        </Link>
                                    </Button>
                                    <Button
                                        type="submit"
                                        disabled={processing}
                                        className="bg-emerald-600 text-white hover:bg-emerald-700"
                                    >
                                        Ajukan ke Meta
                                    </Button>
                                </div>
                            </form>
                        </CardContent>
                    </Card>

                    {/* Preview Bubble Sticky Column */}
                    <div className="lg:sticky lg:top-6 lg:col-span-2">
                        <Card>
                            <CardHeader>
                                <CardTitle>Pratinjau Langsung WhatsApp</CardTitle>
                                <CardDescription>
                                    Simulasi visual real-time bagaimana pesan akan terlihat di layar ponsel penerima.
                                </CardDescription>
                            </CardHeader>
                            <CardContent className="flex justify-center p-4">
                                <TemplatePreview
                                    name={data.name || 'pratinjau_template'}
                                    category={data.category}
                                    language={data.language}
                                    headerType={headerType}
                                    headerText={headerText}
                                    bodyText={bodyText}
                                    footerText={footerText}
                                    buttons={buttons}
                                />
                            </CardContent>
                        </Card>
                    </div>
                </div>
            </div>
        </>
    );
}

TemplateCreate.layout = (page: any) => page;
