import { z } from "zod";

const companyBankAccountSchema = z.object({
  bank_id: z.string().trim().min(1, "Bank kantor wajib dipilih"),
  account_number: z.string().trim().min(1, "Nomor rekening kantor wajib diisi").max(100)
});

export const appSettingsSchema = z.object({
  company_name: z.string().trim().max(150).default(""),
  company_email: z.string().trim().email("Email perusahaan tidak valid").or(z.literal("")).default(""),
  company_phone: z.string().trim().max(50).default(""),
  company_bank_name: z.string().trim().max(150).default(""),
  company_bank_account_number: z.string().trim().max(80).default(""),
  company_bank_accounts: z.array(companyBankAccountSchema).default([]),
  company_address: z.string().trim().max(2000).default(""),
  company_timezone: z.string().trim().min(1, "Timezone wajib diisi").max(80),
  smtp_host: z.string().trim().max(150).default(""),
  smtp_port: z.coerce.number().int().min(1).max(65535),
  smtp_secure: z.coerce.boolean(),
  smtp_user: z.string().trim().max(150).default(""),
  smtp_password: z.string().max(255).default(""),
  smtp_from_name: z.string().trim().max(150).default(""),
  smtp_from_email: z.string().trim().email("Email pengirim tidak valid").or(z.literal("")).default(""),
  purchase_prefix: z.string().trim().min(1).max(20),
  receipt_prefix: z.string().trim().min(1).max(20),
  lot_prefix: z.string().trim().min(1).max(20),
  adjustment_prefix: z.string().trim().min(1).max(20),
  transformation_prefix: z.string().trim().min(1).max(20),
  fund_request_prefix: z.string().trim().min(1).max(20),
  washing_prefix: z.string().trim().min(1).max(20),
  regular_sale_prefix: z.string().trim().min(1).max(20),
  jit_sale_prefix: z.string().trim().min(1).max(20),
  consignment_prefix: z.string().trim().min(1).max(20),
  default_locale: z.enum(["id", "en"]),
  currency_code: z.string().trim().min(1).max(10),
  date_format: z.string().trim().min(1).max(30),
  password_min_length: z.coerce.number().int().min(8).max(64),
  session_timeout_minutes: z.coerce.number().int().min(15).max(10080),
  require_email_verification: z.coerce.boolean(),
  audit_retention_days: z.coerce.number().int().min(30).max(3650)
});
