import { z } from "zod";
import { intIdFromForm, nullableIntIdFromForm } from "./common";

export const CreateUserSchema = z.object({
  username: z.string().min(1, "Uživatelské jméno je povinné"),
  email: z.string().email("Neplatný formát e-mailu"),
  password: z.string().min(8, "Heslo musí mít alespoň 8 znaků").max(200),
  first_name: z.string().min(1, "Jméno je povinné").max(100),
  last_name: z.string().min(1, "Příjmení je povinné").max(100),
  role_id: intIdFromForm.optional(),
  is_active: z
    .preprocess((v) => v === true || v === 1 || v === "1", z.boolean())
    .optional()
    .default(true),
});

export const UpdateUserSchema = z.object({
  username: z.string().optional(),
  email: z.string().email("Neplatný formát e-mailu").optional(),
  password: z.preprocess(
    (v) => (v === "" ? undefined : v),
    z.string().min(8, "Heslo musí mít alespoň 8 znaků").max(200).optional(),
  ),
  first_name: z.string().max(100).optional(),
  last_name: z.string().max(100).optional(),
  role_id: nullableIntIdFromForm.optional(),
  is_active: z
    .preprocess((v) => v === true || v === 1 || v === "1", z.boolean())
    .optional(),
});

export type CreateUserInput = z.infer<typeof CreateUserSchema>;
export type UpdateUserInput = z.infer<typeof UpdateUserSchema>;
