package de.ivu.elect.exchange.gebietsbaum;

import java.util.List;

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.exchange.gebietsbaum.csv.AbstractGebietAktualisierenCsvImportMapper;
import de.ivu.elect.jee.entity.customdata.EmptyCustomData;
import de.ivu.elect.jee.exchange.Violations;

public class SitzeStimmenGebietAktualisierenCsvImportMapper extends AbstractGebietAktualisierenCsvImportMapper<SitzeStimmenGebietDTO> {

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

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

  public SitzeStimmenGebietAktualisierenCsvImportMapper() {
    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.SITZE_UND_STIMMEN_AKTUALISIEREN;
  }

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

  @Override
  protected Violations validateDTOs(List<SitzeStimmenGebietDTO> dtos, GebietsbaumExchangeContext context) {
    return new Violations();
  }

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

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

    gebiet.setGebietsart(gebietsart);
    gebiet.setNummer(dto.getNummer());
    gebiet.setName(dto.getName());
    gebiet.setAnzahlSitze(dto.getAnzahlSitze());
    gebiet.setAnzahlStimmenProWaehler(dto.getAnzahlStimmenProWaehler());

    return gebiet;
  }
}
