package de.ivu.elect.business.system.control.files.strategies;

import javax.annotation.Nullable;

import de.ivu.elect.business.datei.entity.DateiImport;
import de.ivu.elect.business.exchange.entity.DateiImportArt;
import de.ivu.elect.business.mandant.entity.MandantPK;
import de.ivu.elect.business.wahl.entity.WahlPK;
import de.ivu.elect.business.wahl.entity.WahlterminPK;

public class DateiImportCleanupSchluessel {

  @Nullable
  private final MandantPK mandantPK;

  @Nullable
  private final WahlterminPK wahlterminPK;

  @Nullable
  private final WahlPK wahlPK;

  private final DateiImportArt dateiImportArt;

  DateiImportCleanupSchluessel(DateiImport dateiImport) {
    dateiImportArt = dateiImport.getDateiArt();
    mandantPK = bestimmeMandant(dateiImport);
    wahlterminPK = dateiImportArt.korrigiereWahltermin(bestimmeWahltermin(dateiImport)); // ELECTKOM-986
    wahlPK = dateiImportArt.korrigiereWahl(bestimmeWahl(dateiImport)); // ELECTKOM-986
  }



  @Nullable
  private MandantPK bestimmeMandant(DateiImport dateiImport) {
    if (dateiImport.getDatei() != null && dateiImport.getDatei().getMandant() != null) {
      return dateiImport.getDatei().getMandant().getPk();
    }
    return null;
  }

  @Nullable
  private WahlPK bestimmeWahl(DateiImport dateiImport) {
    if (dateiImport.getDatei() != null) {
      if (dateiImport.getDatei().getWahl() != null) {
        return dateiImport.getDatei().getWahl().getPk();
      }
    }
    return null;

  }

  @Nullable
  private static WahlterminPK bestimmeWahltermin(DateiImport dateiImport) {

    if (dateiImport.getDatei() != null) {
      if (dateiImport.getDatei().getWahl() != null) {
        if (dateiImport.getDatei().getWahl().getWahltermin() != null) {
          return dateiImport.getDatei().getWahl().getWahltermin().getPk();
        }
      }
      if (dateiImport.getDatei().getWahltermin() != null) {
        return dateiImport.getDatei().getWahltermin().getPk();
      }
    }
    return null;
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;

    DateiImportCleanupSchluessel that = (DateiImportCleanupSchluessel) o;

    if (mandantPK != null ? !mandantPK.equals(that.mandantPK) : that.mandantPK != null) return false;
    if (wahlterminPK != null ? !wahlterminPK.equals(that.wahlterminPK) : that.wahlterminPK != null) return false;
    if (wahlPK != null ? !wahlPK.equals(that.wahlPK) : that.wahlPK != null) return false;
    return dateiImportArt == that.dateiImportArt;
  }

  @Override
  public int hashCode() {
    int result = mandantPK != null ? mandantPK.hashCode() : 0;
    result = 31 * result + (wahlterminPK != null ? wahlterminPK.hashCode() : 0);
    result = 31 * result + (wahlPK != null ? wahlPK.hashCode() : 0);
    result = 31 * result + (dateiImportArt != null ? dateiImportArt.hashCode() : 0);
    return result;
  }

  public DateiImportArt getDateiImportArt() {
    return dateiImportArt;
  }
}
