import { myinfoEvidenceSchema } from "./application-assessment";
import { z } from "zod";
import { applicationFieldSchema } from "./application-schema";

export const myinfoProfileSchema = applicationFieldSchema
  .pick({ name: true, email: true, phone: true })
  .partial()
  .extend({ evidence: myinfoEvidenceSchema.optional() })
  .strict();
export type MyinfoProfile = z.infer<typeof myinfoProfileSchema>;
const object = (value: unknown): Record<string, unknown> =>
  value && typeof value === "object" && !Array.isArray(value)
    ? (value as Record<string, unknown>)
    : {};
function value(input: unknown) {
  const field = object(input);
  return field.unavailable || typeof field.value !== "string"
    ? ""
    : field.value.trim();
}
export function mapMyinfoProfile(input: unknown): MyinfoProfile {
  const person = object(input),
    mobile = object(person.mobileno);
  const number = value(mobile.nbr),
    code = value(mobile.areacode),
    prefix = value(mobile.prefix);
  const candidates = {
    name: value(person.name),
    email: value(person.email),
    phone:
      mobile.unavailable || !number || !code
        ? ""
        : `${prefix === "+" ? prefix : "+"}${code}${number}`,
  };
  const result: MyinfoProfile = {};
  for (const key of ["name", "email", "phone"] as const) {
    const parsed = applicationFieldSchema.shape[key].safeParse(candidates[key]);
    if (parsed.success) result[key] = parsed.data;
  }
  return result;
}
