import { z } from 'zod';
import { PatientStatusSchema } from '../enums';

// =============================================================
// Patient 主档(身份对象,二级隔离)
// =============================================================

export const PatientSchema = z.object({
  id: z.string().uuid(),
  hostId: z.string().uuid().describe('FK → platforms.id'),
  tenantId: z.string(),
  externalId: z.string(),
  /// stub 期可空 — push 首见时只拿到 patientRef,后续 pull 补全
  name: z.string().nullable(),
  /// stub 期可空;phone IS NULL 自动排除召回池
  phone: z.string().nullable(),
  gender: z.string().nullable(),
  birthDate: z.string().nullable(),
  preferences: z.record(z.string(), z.unknown()).nullable(),
  doNotContact: z.boolean(),
  doNotContactReason: z.string().nullable(),
  doNotContactAt: z.string().nullable(),
  deceased: z.boolean(),
  deceasedAt: z.string().nullable(),
  status: PatientStatusSchema,
  /// 当 status=merged 时指向合并目标(自引用)
  mergedIntoId: z.string().uuid().nullable(),
  createdAt: z.string(),
  updatedAt: z.string(),
});
export type Patient = z.infer<typeof PatientSchema>;

// PatientTimelineResponseSchema 在 fact.ts 重定义(基于 patient_facts,不再用旧 PatientFactEvent)
