import type { IMedipostResponseXMLBase } from '@/packages/shared/src/types/medipost-analysis';

export type Message = {
  messageId: string;
  messageType: string;
  receivedDateTime: string;
  sender: string;
};

export type GetMessageListResponse = {
  checkedDateTime: string;
  messages: Message[];
  code?: number;
  text?: string;
};

export enum MedipostAction {
  GetPublicMessageList = 'GetPublicMessageList',
  GetPublicMessage = 'GetPublicMessage',
  SendPrivateMessage = 'SendPrivateMessage',
  GetPrivateMessageList = 'GetPrivateMessageList',
  GetPrivateMessage = 'GetPrivateMessage',
  DeletePrivateMessage = 'DeletePrivateMessage',
}

export type VoimalikVaartus = {
  VaartusId: string;
  Vaartus: 'jah' | 'ei';
  VaartusJarjekord: number;
};

export type Sisendparameeter = {
  '@_VastuseTyyp'?: 'ARV' | 'VABATEKST' | 'KODEERITUD' | 'AJAHETK';
  '@_VastuseKoodistikuOID'?: string;
  '@_VastuseKoodistikuNimi'?: string;
  '@_URL'?: string;

  UuringIdOID: string;
  UuringId: string;
  TLyhend: string;
  KNimetus: string;
  UuringNimi: string;
  Jarjekord: number;

  VoimalikVaartus: VoimalikVaartus[];
};

export type Kood = {
  HkKood: string;
  HkKoodiKordaja: number;
  Koefitsient: number; // float
  Hind: number; // float
};

export type UuringuAlamElement = {
  UuringIdOID: string;
  UuringId: string;
  TLyhend: string;
  KNimetus: string;
  UuringNimi: string;
  Jarjekord: string;
  Kood?: Kood[];
};

export type UuringuElement = {
  UuringIdOID: string;
  UuringId: string;
  TLyhend: string;
  KNimetus: string;
  UuringNimi: string;
  Jarjekord: string;
  Kood?: Kood[];
  UuringuElement?: UuringuAlamElement[];
};

export type Uuring = {
  tellitav: 'JAH' | 'EI';
  UuringuElement: UuringuElement; //1..1
  MaterjalideGrupp?: MaterjalideGrupp | MaterjalideGrupp[]; //0..n If this is not present, then the analysis can't be ordered.
};

export type UuringuGrupp = {
  UuringuGruppId: string;
  UuringuGruppNimi: string;
  UuringuGruppJarjekord: number;
  Uuring: Uuring | Uuring[]; //1..n
  Kood?: Kood | Kood[]; //0..n
};

export type Konteiner = {
  ProovinouKoodOID?: string; //0..1
  ProovinouKood?: string; //0..1
  KonteineriNimi?: string; //0..1
  KonteineriKirjeldus: string; //1..1
};

export type Materjal = {
  MaterjaliTyypOID: string;
  MaterjaliTyyp: string;
  MaterjaliNimi: string;
  KonteineriOmadus: string;
  MaterjaliPaige: { Kohustuslik: 'JAH' | 'EI' }; //0..1
  MaterjalJarjekord?: number; //0..1
  Konteiner?: Konteiner | Konteiner[]; //0..n
};

export type MaterjalideGrupp = {
  vaikimisi: 'JAH' | 'EI';
  Materjal: Materjal | Materjal[]; //1..n
};

export type Teostaja = {
  UuringuGrupp?: UuringuGrupp | UuringuGrupp[]; //0...n
  Asutus: {
    AsutuseId: string;
    AsutuseNimi: string;
    AsutuseKood: string;
    AllyksuseNimi: string;
    Telefon: number;
    Aadress: string;
  };
  Sisendparameeter?: Sisendparameeter | Sisendparameeter[]; //0...n
};

export type MedipostPublicMessageResponse = IMedipostResponseXMLBase & {
  Saadetis?: {
    Pais: {
      Pakett: { '#text': 'SL' | 'OL' | 'AL' | 'ME' }; // SL - Teenused, OL - Tellimus (meie poolt saadetav saatekiri), AL - Vastus (saatekirja vastus), ME - Teade
      Saatja: string;
      Saaja: string;
      Aeg: string;
      SaadetisId: string;
    };
    Teenused: {
      Teostaja: Teostaja | Teostaja[]; //1..n
    };
  };
};
