import { z } from 'zod'

const dateStringSchema = z.string().min(1)

export const chemotherapySchema = z.object({
  // Data Pasien
  namaPasien: z.string({
    required_error: 'Nama pasien harus diisi',
  }).min(1, 'Nama pasien harus diisi'),
  
  tanggalLahir: z.string({
    required_error: 'Tanggal lahir harus diisi',
  }).min(1, 'Tanggal lahir harus diisi'),
  
  noRM: z.string({
    required_error: 'Nomor RM harus diisi',
  }).min(1, 'Nomor RM harus diisi'),
  
  alamat: z.string({
    required_error: 'Alamat harus diisi',
  }).min(1, 'Alamat harus diisi'),
  
  beratBadan: z.union([
    z.string(),
    z.number()
  ]).transform(val => val === '' ? null : Number(val))
    .refine(val => val === null || (val >= 0 && val <= 500), {
      message: 'Berat badan harus di antara 0-500 kg',
    }),
  
  tinggiBadan: z.union([
    z.string(),
    z.number()
  ]).transform(val => val === '' ? null : Number(val))
    .refine(val => val === null || (val >= 0 && val <= 300), {
      message: 'Tinggi badan harus di antara 0-300 cm',
    }),
  
  diagnosa: z.string({
    required_error: 'Diagnosa harus dipilih',
  }).min(1, 'Diagnosa harus dipilih'),

  // Protokol Kemoterapi
  siklus: z.string({
    required_error: 'Siklus harus diisi',
  }).min(1, 'Siklus harus diisi'),
  
  periodeAwal: z.string({
    required_error: 'Periode awal harus diisi',
  }).min(1, 'Periode awal harus diisi'),
  
  periodeAkhir: dateStringSchema.refine((val) => {
    if (!val) return false
    const date = new Date(val)
    return !isNaN(date.getTime())
  }, {
    message: 'Format tanggal tidak valid'
  }),

  tanggalKemoterapi: dateStringSchema.refine((val) => {
    if (!val) return false
    const date = new Date(val)
    return !isNaN(date.getTime())
  }, {
    message: 'Format tanggal tidak valid'
  }),
  
  dokterKRJ: z.string({
    required_error: 'Dokter harus dipilih',
  }).refine(val => val !== '', {
    message: 'Dokter harus dipilih',
  }),
})