package de.ivu.elect.core.exchange.gebietsbaum.csv;

import de.ivu.elect.business.datei.entity.FileType;
import de.ivu.elect.business.exchange.control.FileFormat;
import de.ivu.elect.business.gebietsbaum.boundary.GebietImportAktualisierenArt;
import de.ivu.elect.business.gebietsbaum.control.GebietsbaumExchangeContext;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gebietsbaum.entity.Gebietsart;
import de.ivu.elect.business.mandant.entity.Mandant;
import de.ivu.elect.exchange.gebietsbaum.MandantGebietDTO;
import de.ivu.elect.exchange.gebietsbaum.csv.AbstractGebietAktualisierenCsvImportMapper;
import de.ivu.elect.jee.entity.customdata.EmptyCustomData;

public class CoreGebietMandantAktualisierenCsvImportMapper extends AbstractGebietAktualisierenCsvImportMapper<MandantGebietDTO> {

  public static final String FILE_FORMAT_NAME = "file.format.gebiet.mandant.aktualisieren";

  public static final FileFormat FILE_FORMAT = new FileFormat(FILE_FORMAT_NAME, FileType.CSV);


  public CoreGebietMandantAktualisierenCsvImportMapper() {
    super();
  }

  @Override
  protected boolean isAcceptContextWurzelgebietVorhanden(GebietsbaumExchangeContext context) {
    return context.getWahl() != null; // ELECT-14078
  }

  @Override
  public FileFormat getFileFormat() {
    return FILE_FORMAT;
  }

  @Override
  public GebietImportAktualisierenArt getGebietImportAktualisierenArt() {
    return GebietImportAktualisierenArt.MANDANTEN;
  }

  @Override
  protected Class<MandantGebietDTO> getDtoClass() {
    return MandantGebietDTO.class;
  }


  @Override
  protected Gebiet mapDtoToGebiet(MandantGebietDTO dto) {
    var gebiet = new Gebiet(EmptyCustomData.INSTANCE);

    var gebietsart = new Gebietsart();
    gebietsart.setName(dto.getGebietsartName());

    gebiet.setGebietsart(gebietsart);
    gebiet.setNummer(dto.getNummer());
    gebiet.setName(dto.getName());
    var mandant = new Mandant();
    mandant.setNummer(dto.getMandantNummer());
    gebiet.setVerantwortlicherMandant(mandant);

    return gebiet;
  }
}
