import { z } from 'zod';

export type ExportMarketFormValues = {
    country_code: string;
    country_name: string;
    city: string;
    volume_ton: string;
    year: string;
    title: { id: string; en: string };
    slug: { id: string; en: string };
    description: { id: string; en: string };
    is_active: boolean;
    sort_order: number;
};

const translatableField = (max: number) =>
    z.object({
        id: z.string().max(max, `Maksimal ${max} karakter`),
        en: z.string().max(max, `Maksimal ${max} karakter`),
    });

const slugField = z.object({
    id: z
        .string()
        .max(255, 'Maksimal 255 karakter')
        .regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/, 'Format slug tidak valid (huruf kecil & tanda hubung)'),
    en: z
        .string()
        .max(255, 'Maksimal 255 karakter')
        .regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/, 'Invalid slug format (lowercase & hyphens)'),
});

export const exportMarketSchema = z.object({
    country_code: z.string().max(2).optional().or(z.literal('')),
    country_name: z.string().min(1, 'Nama negara wajib diisi').max(150, 'Maksimal 150 karakter'),
    city: z.string().max(150).optional().or(z.literal('')),
    volume_ton: z.string().max(20).optional().or(z.literal('')),
    year: z.string().max(4).optional().or(z.literal('')),
    title: translatableField(255).superRefine((value, ctx) => {
        if (!value.id.trim()) {
            ctx.addIssue({ code: 'custom', message: 'Judul (ID) wajib diisi', path: ['id'] });
        }

        if (!value.en.trim()) {
            ctx.addIssue({ code: 'custom', message: 'Title (EN) is required', path: ['en'] });
        }
    }),
    slug: slugField.superRefine((value, ctx) => {
        if (!value.id.trim()) {
            ctx.addIssue({ code: 'custom', message: 'Slug (ID) wajib diisi', path: ['id'] });
        }

        if (!value.en.trim()) {
            ctx.addIssue({ code: 'custom', message: 'Slug (EN) is required', path: ['en'] });
        }
    }),
    description: translatableField(2000),
    is_active: z.boolean(),
    sort_order: z.coerce.number().int().min(0, 'Minimal 0'),
}) as unknown as z.ZodType<ExportMarketFormValues, ExportMarketFormValues>;
