import { Patient, Tour } from '@prisma/client';

export interface ValidationResult {
  result: boolean;
  notes: string[];
  errors: string[];
}

export function validatePatient(patient: Patient): ValidationResult {
  const notes: string[] = [];
  const errors: string[] = [];
  let isValid = true;

  if (!patient?.name) {
    isValid = false;
    errors.push('Patient: Vorname ist nicht gefüllt');
  }
  if (!patient?.surname) {
    isValid = false;
    errors.push('Patient: Nachname ist nicht gefüllt');
  }
  if (!patient?.birthday) {
    isValid = false;
    notes.push('Patient: Geburtstag ist nicht gefüllt');
  }
  if (!patient?.healthinsurance) {
    isValid = false;
    errors.push('Patient Stammdaten: Krankenversicherung nicht gefüllt');
  }
  // if (!patient?.careDegree) {
  //   notes.push('Patient: Pflegegrad ist nicht gefüllt');
  // }
  // if (!patient?.disabilityMark1) {
  //   notes.push('Patient: Merkzeichen 1 ist nicht gefüllt');
  // }
  // if (!patient?.disabilityMark2) {
  //   notes.push('Patient: Merkzeichen 2 ist nicht gefüllt');
  // }

  return {
    result: isValid,
    errors,
    notes,
  };
}

export function validatePatientDataOnTours(tours: Tour[]): ValidationResult {
  const errors: string[] = [];
  let isValid = true;

  for (const tour of tours) {
    if (!tour.patientName) {
      isValid = false;
      errors.push(
        `Tour ${tour.operationId}: Patient Vorname ist nicht gefüllt`,
      );
    }
    if (!tour.patientSurname) {
      isValid = false;
      errors.push(
        `Tour ${tour.operationId}: Patient Nachname ist nicht gefüllt`,
      );
    }
    if (!tour.healthInsurance) {
      isValid = false;
      errors.push(
        `Tour ${tour.operationId}: Patient Krankenversicherung ist nicht gefüllt`,
      );
    }
  }

  return {
    result: isValid,
    errors,
    notes: [],
  };
}

export function validateTour(tour: Tour): ValidationResult {
  const errors: string[] = [];
  let isValid = true;

  if (!tour.ordinanceType) {
    isValid = false;
    errors.push(`Tour ${tour.operationId}: Verordnungsart ist nicht gefüllt`);
  }
  if (!tour.transportType) {
    isValid = false;
    errors.push(`Tour ${tour.operationId}: Transportart ist nicht gefüllt`);
  }
  if (!tour.category) {
    isValid = false;
    errors.push(`Tour ${tour.operationId}: Kategorie ist nicht gefüllt`);
  }
  if (!tour.startDate) {
    isValid = false;
    errors.push(`Tour ${tour.operationId}: Startzeit ist nicht gefüllt`);
  }
  if (!tour.startStreet || !tour.startZip || !tour.startCity) {
    isValid = false;
    errors.push(`Tour ${tour.operationId}: Start Adresse ist nicht gefüllt`);
  }
  if (!tour.targetStreet || !tour.targetZip || !tour.targetCity) {
    isValid = false;
    errors.push(`Tour ${tour.operationId}: Ziel Adresse ist nicht gefüllt`);
  }
  if (tour.occupiedKm > 9990) {
    isValid = false;
    errors.push(`Tour ${tour.operationId}: Besetzte Kilometer sind zu hoch`);
  }

  return {
    result: isValid,
    errors,
    notes: [],
  };
}

export function validateTransport(tour: Tour): ValidationResult {
  const errors: string[] = [];
  let isValid = true;

  if (!tour.carName) {
    isValid = false;
    errors.push(`Tour ${tour.operationId}: Fahrzeugname ist nicht angegeben`);
  }

  if (!tour.driverName) {
    isValid = false;
    errors.push(`Tour ${tour.operationId}: Fahrer ist nicht angegeben`);
  }

  if (!tour.codriverName) {
    isValid = false;
    errors.push(`Tour ${tour.operationId}: Beifahrer ist nicht angegeben`);
  }

  if (!tour.startBegin) {
    isValid = false;
    errors.push(`Tour ${tour.operationId}: Anfahrt-Stempel fehlt`);
  }

  if (!tour.empty) {
    isValid = false;
    errors.push(`Tour ${tour.operationId}: Frei-Stempel fehlt`);
  }

  return {
    result: isValid,
    errors,
    notes: [],
  };
}
