export const NormStatus: Record<number, string> = {
  0: 'NORMAL',
  1: 'WARNING',
  2: 'REQUIRES_ATTENTION',
} as const;

export const AnalysisOrderStatus = {
  1: 'QUEUED',
  2: 'ON_HOLD',
  3: 'PROCESSING',
  4: 'COMPLETED',
  5: 'REJECTED',
  6: 'CANCELLED',
} as const;

export type UuringuVastus = {
  VastuseVaartus: string; // numeric or text like 'Negatiivne'
  VastuseAeg: string;
  NormYlem?: {
    '#text': number;
    '@_kaasaarvatud': string;
  }; // 0..1
  NormAlum?: {
    '#text': number;
    '@_kaasaarvatud': string;
  };
  NormiStaatus: keyof typeof NormStatus;
  ProoviJarjenumber: number;
};

export type UuringElement = {
  UuringIdOID: string;
  UuringId: string;
  TLyhend: string;
  KNimetus: string;
  UuringNimi: string;
  TellijaUuringId: number;
  TeostajaUuringId: string;
  UuringOlek: keyof typeof AnalysisOrderStatus;
  Mootyhik?: string; // 0..1
  Kood: {
    HkKood: number;
    HkKoodiKordaja: number;
    Koefitsient: number;
    Hind: number;
  };
  UuringuVastus?: UuringuVastus | UuringuVastus[]; // 0..n
  UuringuKommentaar?: string;
};

export type ResponseUuring = {
  UuringuElement: UuringElement;
  UuringuTaitjaAsutuseJnr: number;
};

export type ResponseUuringuGrupp = {
  UuringuGruppId: string;
  UuringuGruppNimi: string;
  Uuring: ResponseUuring | ResponseUuring[]; // 1..n
};

export interface IMedipostResponseXMLBase {
  '?xml': {
    '@_version': string;
    '@_encoding': string;
    '@_standalone': 'yes' | 'no';
  };
  ANSWER?: { CODE: number };
}

export type MedipostOrderResponse = IMedipostResponseXMLBase & {
  Saadetis: {
    Pais: {
      Pakett: {
        '#text': string;
        '@_versioon': string;
      };
      Saatja: string;
      Saaja: string;
      Aeg: string;
      SaadetisId: string;
      Email: string;
    };
    Vastus?: {
      ValisTellimuseId: string;
      Asutus: {
        '@_tyyp': string; // TEOSTAJA
        '@_jarjenumber': string;
        AsutuseId: number;
        AsutuseNimi: string;
        AsutuseKood: string;
        AllyksuseNimi?: string;
        Telefon: number;
      }[]; //@_tyyp = TELLIJA 1..1, @_tyyp = TEOSTAJA 1..n
      Personal: {
        '@_tyyp': string;
        '@_jarjenumber': string;
        PersonalOID: string;
        PersonalKood: string;
        PersonalPerekonnaNimi: string;
        PersonalEesNimi: string;
        Telefon: number;
      };
      Patsient: {
        IsikukoodiOID: string;
        Isikukood: string;
        PerekonnaNimi: string;
        EesNimi: string;
        SynniAeg: string;
        SuguOID: string;
        Sugu: string;
      };
      Proov: Array<{
        ProovinouIdOID: string;
        ProovinouId: string;
        MaterjaliTyypOID: string;
        MaterjaliTyyp: number;
        MaterjaliNimi: string;
        Ribakood: string;
        Jarjenumber: number;
        VotmisAeg: string;
        SaabumisAeg: string;
      }>;
      TellimuseNumber: string;
      TellimuseOlek: keyof typeof AnalysisOrderStatus;
      UuringuGrupp?: ResponseUuringuGrupp | ResponseUuringuGrupp[];
    };
    Tellimus?: {
      ValisTellimuseId: string;
    };
  };
};
