import { DATE_TIME_FORMAT } from '@/lib/constants';
import { Tables } from '@/supabase/database.types';
import { format } from 'date-fns';

const isProd = process.env.NODE_ENV === 'production';

export const getPais = (
  sender: string,
  recipient: string,
  createdAt: Date,
  messageId: number,
) => {
  if (isProd) {
    // return correct data
  }
  return `<Pais>
    <Pakett versioon="20">OL</Pakett>
    <Saatja>${sender}</Saatja>
    <Saaja>${recipient}</Saaja>
    <Aeg>${format(createdAt, DATE_TIME_FORMAT)}</Aeg>
    <SaadetisId>${messageId}</SaadetisId>
    <Email>argo@medreport.ee</Email>
  </Pais>`;
};

export const getClientInstitution = () => {
  if (isProd) {
    // return correct data
  }
  return `<Asutus tyyp="TELLIJA">
      <AsutuseId>16381793</AsutuseId>
      <AsutuseNimi>MedReport OÜ</AsutuseNimi>
      <AsutuseKood>TSU</AsutuseKood>
      <Telefon>+37258871517</Telefon>
    </Asutus>`;
};

export const getProviderInstitution = () => {
  if (isProd) {
    // return correct data
  }
  return `<Asutus tyyp="TEOSTAJA">
      <AsutuseId>11107913</AsutuseId>
      <AsutuseNimi>Synlab HTI Tallinn</AsutuseNimi>
      <AsutuseKood>SLA</AsutuseKood>
      <AllyksuseNimi>Synlab HTI Tallinn</AllyksuseNimi>
      <Telefon>+3723417123</Telefon>
    </Asutus>`;
};

export const getClientPerson = () => {
  if (isProd) {
    // return correct data
  }
  return `<Personal tyyp="TELLIJA" jarjenumber="1">
      <PersonalOID>1.3.6.1.4.1.28284.6.2.4.9</PersonalOID>
      <PersonalKood>D07907</PersonalKood>
      <PersonalPerekonnaNimi>Eduard</PersonalPerekonnaNimi>
      <PersonalEesNimi>Tsvetkov</PersonalEesNimi>
      <Telefon>+37258131202</Telefon>
    </Personal>`;
};

export const getOrderEnteredPerson = () => {
  if (isProd) {
    // return correct data
  }
  return `<Personal tyyp="SISESTAJA" jarjenumber="1">
      <PersonalOID>1.3.6.1.4.1.28284.6.2.4.9</PersonalOID>
      <PersonalKood>D07907</PersonalKood>
      <PersonalPerekonnaNimi>Eduard</PersonalPerekonnaNimi>
      <PersonalEesNimi>Tsvetkov</PersonalEesNimi>
      <Telefon>+37258131202</Telefon>
    </Personal>`;
};

export const getPatient = (
  idCode: number,
  surname: string,
  firstName: string,
  birthDate: string,
  genderLetter: string,
) => {
  return `<Patsient>
		<IsikukoodiOID>1.3.6.1.4.1.28284.6.2.2.1</IsikukoodiOID>
		<Isikukood>${idCode}</Isikukood>
		<PerekonnaNimi>${surname}</PerekonnaNimi>
		<EesNimi>${firstName}</EesNimi>
		<SynniAeg>${birthDate}</SynniAeg>
		<SuguOID>1.3.6.1.4.1.28284.6.2.3.16.2</SuguOID>
		<Sugu>${genderLetter}</Sugu>
	</Patsient>`;
};

export const getConfidentiality = () => {
  if (isProd) {
    // return correct data
  }
  return `<Konfidentsiaalsus>
      <PatsiendileOID>2.16.840.1.113883.5.25</PatsiendileOID>
      <Patsiendile>N</Patsiendile>
      <ArstileOID>1.3.6.1.4.1.28284.6.2.2.39.1</ArstileOID>
      <Arstile>N</Arstile>
      <EsindajaleOID>1.3.6.1.4.1.28284.6.2.2.37.1</EsindajaleOID>
      <Esindajale>N</Esindajale>
    </Konfidentsiaalsus>`;
};

export const getOrderEnteredByPerson = () => {
  if (isProd) {
    // return correct data
  }
  return `
  	<Personal tyyp="SISESTAJA" jarjenumber="1">
      <PersonalOID>1.3.6.1.4.1.28284.6.2.4.9</PersonalOID>
      <PersonalKood>D07907</PersonalKood>
      <PersonalPerekonnaNimi>Eduard</PersonalPerekonnaNimi>
      <PersonalEesNimi>Tsvetkov</PersonalEesNimi>
      <Telefon>+37258131202</Telefon>
	</Personal>`;
};

export const getSpecimen = (
  materialTypeOid: string,
  materialGroupId: string,
  materialName: string,
  order: number,
  sampleContainerOid?: string,
  sampleContainerId?: string,
) =>
  `
  <Proov>
      ${sampleContainerOid ? `<ProovinouIdOID>${sampleContainerOid}</ProovinouIdOID>` : null}
      ${sampleContainerId ? `<ProovinouId>${sampleContainerId}</ProovinouId>` : null}
      <MaterjaliTyypOID>${materialTypeOid}</MaterjaliTyypOID>
      <MaterjaliTyyp>${materialGroupId}</MaterjaliTyyp>
      <MaterjaliNimi>${materialName}</MaterjaliNimi>
      <Jarjenumber>${order}</Jarjenumber>
    </Proov>`;

export const getAnalysisElement = (
  analysisIdOid: string,
  analysisIdOriginal: string,
  tehikShortLoinc: string,
  tehikLoincName: string,
  analysisElementId: number,
  analysisNameLab?: string | null,
) => {
  return `<UuringuElement>
		<UuringIdOID>${analysisIdOid}</UuringIdOID>
		<UuringId>${analysisIdOriginal}</UuringId>
		<TLyhend>${tehikShortLoinc}</TLyhend>
		<KNimetus>${tehikLoincName}</KNimetus>
		<UuringNimi>${analysisNameLab ?? tehikLoincName}</UuringNimi>
		<TellijaUuringId>${analysisElementId}</TellijaUuringId>
	</UuringuElement>`;
};

export const getAnalysisGroup = (
  analysisGroupOriginalId: string,
  analysisGroupName: string,
  specimenOrderNr: number,
  analysisElement: Tables<'analysis_elements'>,
) =>
  `<UuringuGrupp>
		<UuringuGruppId>${analysisGroupOriginalId}</UuringuGruppId>
		<UuringuGruppNimi>${analysisGroupName}</UuringuGruppNimi>
		<Uuring>
		${getAnalysisElement(analysisElement.analysis_id_oid, analysisElement.analysis_id_original, analysisElement.tehik_short_loinc, analysisElement.tehik_loinc_name, analysisElement.id, analysisElement.analysis_name_lab)}
		<ProoviJarjenumber>${specimenOrderNr}</ProoviJarjenumber>
		</Uuring>
	</UuringuGrupp>`;
