import { z } from 'zod';

export type ProductCategoryFormValues = {
    name: { id: string; en: string };
    slug: { id: string; en: string };
    description: { id: string; en: string };
    is_active: boolean;
    sort_order: number;
};

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 productCategorySchema = z.object({
    name: z
        .object({
            id: z.string().max(255, 'Maksimal 255 karakter'),
            en: z.string().max(255, 'Maksimal 255 karakter'),
        })
        .superRefine((value, ctx) => {
            if (!value.id.trim()) {
                ctx.addIssue({ code: 'custom', message: 'Nama (ID) wajib diisi', path: ['id'] });
            }

            if (!value.en.trim()) {
                ctx.addIssue({ code: 'custom', message: 'Name (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: z.object({
        id: z.string().max(1000, 'Maksimal 1000 karakter'),
        en: z.string().max(1000, 'Maksimal 1000 karakter'),
    }),
    is_active: z.boolean(),
    sort_order: z.coerce.number().int().min(0, 'Minimal 0'),
}) as unknown as z.ZodType<ProductCategoryFormValues, ProductCategoryFormValues>;
