package de.ivu.elect.business.stimmzettel.entity;

import de.ivu.elect.jee.presentation.charts.AbstractChartModelBuilder;

public enum StimmzettelTeam {

  UNBEKANNT {
    @Override
    public boolean isFestgelegt() {
      return false;
    }

    @Override
    public boolean isImHeaderEinblenden() {
      return false;
    }

    @Override
    public boolean isMitTeam() {
      return false;
    }

    @Override
    public boolean isUnbekannt() {
      return true;
    }

    @Override
    public String getNummerPrefix() {
      throw new IllegalStateException();
    }

    @Override
    public String getFarbe() {
      return AbstractChartModelBuilder.WEISS;
    }

    @Override
    public StimmzettelKopfdatumArt getStimmzettelKopfdatumVersionsnummer() {
      throw new UnsupportedOperationException(name());
    }

    @Override
    public String getErgebnisFilenameSuffix() {
      throw new UnsupportedOperationException(name());
    }

    @Override
    public boolean isHilfsteam() {
      return false;
    }
  },
  OHNE_TEAM {
    @Override
    public boolean isImHeaderEinblenden() {
      return false;
    }

    @Override
    public boolean isMitTeam() {
      return false;
    }

    @Override
    public boolean isKopfzahlenErfassen() {
      return true;
    }

    @Override
    public String getNummerPrefix() {
      return "";
    }

    @Override
    public String getFarbe() {
      return AbstractChartModelBuilder.GRUEN;
    }

    @Override
    public StimmzettelKopfdatumArt getStimmzettelKopfdatumVersionsnummer() {
      return StimmzettelKopfdatumArt.VERSIONSNUMMER;
    }

    @Override
    public String getErgebnisFilenameSuffix() {
      return "gesamt";
    }

    @Override
    public boolean isHilfsteam() {
      return false;
    }

  },
  MIT_TEAM {
    @Override
    public boolean isImHeaderEinblenden() {
      return false;
    }

    @Override
    public String getNummerPrefix() {
      throw new IllegalStateException();
    }

    @Override
    public String getFarbe() {
      return AbstractChartModelBuilder.WEISS;
    }

    @Override
    public boolean isFestgelegt() {
      return false;
    }

    @Override
    public StimmzettelKopfdatumArt getStimmzettelKopfdatumVersionsnummer() {
      throw new UnsupportedOperationException(name());
    }

    @Override
    public String getErgebnisFilenameSuffix() {
      throw new UnsupportedOperationException(name());
    }

    @Override
    public boolean isHilfsteam() {
      return false;
    }

  },
  HAUPTTEAM_A {
    @Override
    public boolean isKopfzahlenErfassen() {
      return true;
    }

    @Override
    public String getNummerPrefix() {
      return "A";
    }

    @Override
    public String getFarbe() {
      return AbstractChartModelBuilder.GRUEN;
    }

    @Override
    public boolean isHauptteam() {
      return true;
    }

    @Override
    public StimmzettelKopfdatumArt getStimmzettelKopfdatumVersionsnummer() {
      return StimmzettelKopfdatumArt.VERSIONSNUMMER;
    }

    @Override
    public boolean isHilfsteam() {
      return false;
    }

  },
  HILFSTEAM_B {
    @Override
    public String getNummerPrefix() {
      return "B";
    }

    @Override
    public String getFarbe() {
      return AbstractChartModelBuilder.GELB;
    }

    @Override
    public StimmzettelKopfdatumArt getStimmzettelKopfdatumVersionsnummer() {
      return StimmzettelKopfdatumArt.VERSIONSNUMMER_ERFASSUNGSTEAM_B;
    }

    @Override
    public boolean isHilfsteam() {
      return true;
    }

  },
  HILFSTEAM_C {
    @Override
    public String getNummerPrefix() {
      return "C";
    }

    @Override
    public String getFarbe() {
      return AbstractChartModelBuilder.BLAU;
    }

    @Override
    public StimmzettelKopfdatumArt getStimmzettelKopfdatumVersionsnummer() {
      return StimmzettelKopfdatumArt.VERSIONSNUMMER_ERFASSUNGSTEAM_C;
    }

    @Override
    public boolean isHilfsteam() {
      return true;
    }
  },
  HILFSTEAM_D {
    @Override
    public String getNummerPrefix() {
      return "D";
    }

    @Override
    public String getFarbe() {
      return AbstractChartModelBuilder.ORANGE;
    }

    @Override
    public StimmzettelKopfdatumArt getStimmzettelKopfdatumVersionsnummer() {
      return StimmzettelKopfdatumArt.VERSIONSNUMMER_ERFASSUNGSTEAM_D;
    }

    @Override
    public boolean isHilfsteam() {
      return true;
    }

  },
  HILFSTEAM_E {
    @Override
    public String getNummerPrefix() {
      return "E";
    }

    @Override
    public String getFarbe() {
      return AbstractChartModelBuilder.CYAN;
    }

    @Override
    public StimmzettelKopfdatumArt getStimmzettelKopfdatumVersionsnummer() {
      return StimmzettelKopfdatumArt.VERSIONSNUMMER_ERFASSUNGSTEAM_E;
    }

    @Override
    public boolean isHilfsteam() {
      return true;
    }

  },
  HILFSTEAM_F {
    @Override
    public String getNummerPrefix() {
      return "F";
    }

    @Override
    public String getFarbe() {
      return AbstractChartModelBuilder.PINK;
    }

    @Override
    public StimmzettelKopfdatumArt getStimmzettelKopfdatumVersionsnummer() {
      return StimmzettelKopfdatumArt.VERSIONSNUMMER_ERFASSUNGSTEAM_F;
    }

    @Override
    public boolean isHilfsteam() {
      return true;
    }

  };

  public boolean isFestgelegt() {
    return true;
  }

  public boolean isImHeaderEinblenden() {
    return true;
  }

  public boolean isMitTeam() {
    return true;
  }

  public boolean isUnbekannt() {
    return false;
  }

  public boolean isKopfzahlenErfassen() {
    return false;
  }

  public boolean istimmzettelpruefen() {
    return isKopfzahlenErfassen(); // im Moment gleichwertig
  }

  public abstract String getNummerPrefix();

  public abstract String getFarbe();

  public boolean isHauptteam() {
    return false;
  }

  public boolean isFestgelegtesTeamMitMehrerenTeams() {
    return isMitTeam() && isFestgelegt();
  }

  public abstract StimmzettelKopfdatumArt getStimmzettelKopfdatumVersionsnummer();

  public String getErgebnisFilenameSuffix() {
    return name().toLowerCase();
  }

  public abstract boolean isHilfsteam();

}
