import java.awt.*;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;
import javax.swing.*;

public  class Balkendiagramm extends JPanel {
 
  private double gesamt;
  private double haeufigkeit[];
  private double maxwert;
  private int verschiebung = 0;
  private double haeufigkeit_de[] = { 0.0651, 0.0189, 0.0306, 0.0508, 0.174, 0.0166, 0.0301, 0.0476,0.0755, 0.0027, 0.0121,0.0344,0.0252,0.0978,0.0251,0.0079,0.0002,0.07,0.0727,0.0615,0.0435,0.067,0.0189,0.0003,0.0004,0.0113};
  private boolean zeigeDeutsch = true;
      
 
  public void setHaeufigkeit(double haeufigkeit[]) {
    
    this.haeufigkeit = haeufigkeit;
    gesamt = 0; 
    for (int i = 0; i < 26; i++) {
      gesamt += haeufigkeit[i];
    }
    for (int i = 0; i < 26; i++) {
      haeufigkeit[i] /= gesamt;
    }
    maxwert = 0.20;
    
  }
  
  public void setVerschiebung(int verschiebung) {
    if (verschiebung >= 0 && verschiebung < 26) {
      this.verschiebung = verschiebung;
      
    } else {
      this.verschiebung = 0;  
    } // end of if-else
  }
  public void setZeigeDeutsch(boolean show) {
    zeigeDeutsch = show;
  }

 
  public void paintComponent(Graphics g) {
    Graphics2D g2 = (Graphics2D) g;
    super.paintComponent(g2);
    Dimension d = getSize(null);
    //Skalieren auf 100x100 mit y-Invertierung
    g2.scale(d.getWidth() / 120.0, -d.getHeight() / 100.0);
    // Ursprung verschieben nach (15,-90)
    g2.translate(5, -90);
    // Linien etwas breiter
    g2.setStroke(new BasicStroke(1.5f));
    // x-Achse zeichnen
    g2.draw(new Line2D.Double(0, 0, 104, 0));
    // Linien etwas dünner
    g2.setStroke(new BasicStroke(0.5f));
    // Deutsche Häufigkeit grau
    g2.setColor(Color.darkGray);
    if(zeigeDeutsch) {
      
      // Säulen zeichnen
      for (int i = 0; i < 26; i++) {
        g2.fill(new Rectangle2D.Double(4 * i+1, 0, 2, haeufigkeit_de[i] / maxwert *100));
      }
    }
    
    // Texthäufigkeit blau
    g2.setColor(Color.blue);
    // Säulen zeichnen
    for (int i = 0; i < 26; i++) {
      g2.fill(new Rectangle2D.Double(4 * i, 0, 2, haeufigkeit[(i+verschiebung)%26] / maxwert *100));
    }
    // y-Invertierung rückgängig machen
    g2.scale(1, -1);
    // Beschriftung x-Achse
    String xAchse = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    // Fontgröße für Beschriftung ändern
    g2.setColor(Color.black);
    g2.setFont(g2.getFont().deriveFont(5f));
    for (int i = 0; i < 26; i++) {
      g2.drawString(xAchse.substring(i, i + 1),
      i * 4, +6);
    }
  }
}
