#include <ezButton.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

// Buttons
ezButton button1(2); 
ezButton button2(4); 
ezButton button3(5); 

// Variaveis

int estado = 0;
String tamanho,sabor, cobertura, algoMais, entrega;

#define LED_ROXO 12
#define LED_ROSA 13
#define LED_AMARELO 14

// Fim das variaveis

void setup() {

  pinMode(LED_ROXO, OUTPUT);
  pinMode(LED_ROSA, OUTPUT);
  pinMode(LED_AMARELO, OUTPUT);

  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;);
  }

  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(10, 10);
  display.println("Churros do IF");
  display.display(); 
  Serial.begin(9600);
  delay(2000);

}

void loop() {

  button1.loop(); 
  button2.loop();
  button3.loop();

  switch (estado) {
    case 0: pergunta1(); break;
    case 1: pergunta2(); break;
    case 2: pergunta3(); break;
    case 3: pergunta4(); break;
    case 4: pergunta5(); break;
    case 5: operacao();  break;   
  }

}

void pergunta1() {
  
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(10, 10);
  display.println("Churros do IF");
  display.setCursor(10, 30);
  display.println("Qual o tamanho do churros? Green - Pequeno, Red - Medio, Blue - Grande");
  display.setCursor(50, 50);
  display.println(tamanho);
  display.display();

  if (button1.isReleased()) {
    tamanho= "Pequeno";
    estado= 1;
  } 
  
  if (button2.isReleased()) {
    tamanho= "Medio";
    estado= 1;
  }

  if (button3.isReleased()) {
    tamanho= "Grande";
    estado= 1;
  }

  display.clearDisplay();

}

void pergunta2() {
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(10, 10);
  display.println("Churros do IF");
  display.setCursor(0, 30);
  display.println("Sabor? Green - Chocolate, Red - Doce de leite, Blue - Nutella");
  display.setCursor(50, 50);
  display.display();

  if (button1.isReleased()) { // verde
    sabor = "Chocolate";
    estado = 2;
  }

  if (button2.isReleased()) { // vermelho
    sabor = "Doce de leite";
    estado = 2;    
  }

  if (button3.isReleased()) { // azul
    sabor = "Nutella";
    estado = 2;    
  }

}

void pergunta3() {
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(10, 10);
  display.println("Churros do IF");
  display.setCursor(0, 30);
  display.println("Cobertura? Green - Acucar, Red - Canela, Blue - Mel");
  display.setCursor(50, 50);
  display.display();

  if (button1.isReleased()) { // verde
    cobertura = "Acucar";
    estado = 3;
  }

  if (button2.isReleased()) { // vermelho
    cobertura = "Canela";
    estado = 3;    
  }

  if (button3.isReleased()) { // azul
    cobertura = "Mel";
    estado = 3;    
  }
}

void pergunta4() {
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(10, 10);
  display.println("Churros do IF");
  display.setCursor(0, 30);
  display.println("Confeitos? Green - Granulado, Red - Leite Ninho, Blue - Nozes");
  display.setCursor(50, 50);
  display.display();

  if (button1.isReleased()) { // verde
    algoMais = "Granulado";
    estado = 4;
  }

  if (button2.isReleased()) { // vermelho
    algoMais = "Leite Ninho";
    estado = 4;    
  }

  if (button3.isReleased()) { // azul
    algoMais = "Nozes";
    estado = 4;    
  }
}

void pergunta5() {
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(10, 10);
  display.println("Churros do IF");
  display.setCursor(0, 30);
  display.println("E pra viagem? Green - Viagem, Red - Comer aqui");
  display.setCursor(50, 50);
  display.display();

  if (button1.isReleased()) { // verde
    entrega = "Viagem";
    estado = 5;
  }

  if (button2.isReleased()) { // vermelho
    entrega = "Comer aqui";
    estado = 5;    
  }

}

void operacao() {

  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(10, 10);
  display.println("Churros do IF");
  display.setCursor(0, 30);

  String frase = "Fazendo um churros ";
  String frase2 = frase + String(tamanho) + "...";

  display.println(frase2);
  display.setCursor(50, 50);
  display.display();
  analogWrite(LED_AMARELO, HIGH);

  delay(5000);

  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(10, 10);
  display.println("Churros do IF");
  display.setCursor(0, 30);

  String frase3 = "Adicionando sabor " + String(sabor) + "...";

  display.println(frase3);
  display.setCursor(50, 50);
  display.display();

  analogWrite(LED_AMARELO, LOW);
  analogWrite(LED_ROXO, HIGH);

  delay(5000);

  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(10, 10);
  display.println("Churros do IF");
  display.setCursor(0, 30);

  String frase4 = "Colocando a cobertura de " + String(cobertura) + "...";

  display.println(frase4);
  display.setCursor(50, 50);
  display.display();

  analogWrite(LED_AMARELO, LOW);
  analogWrite(LED_ROXO, LOW);
  analogWrite(LED_ROSA, HIGH);

  delay(5000);

  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(10, 10);
  display.println("Churros do IF");
  display.setCursor(0, 30);
  display.println("Seu pedido esta pronto!");
  display.setCursor(50, 50);
  display.display();
  analogWrite(LED_ROSA, LOW);

  estado = 6; 

}
esp:VIN
esp:GND.2
esp:D13
esp:D12
esp:D14
esp:D27
esp:D26
esp:D25
esp:D33
esp:D32
esp:D35
esp:D34
esp:VN
esp:VP
esp:EN
esp:3V3
esp:GND.1
esp:D15
esp:D2
esp:D4
esp:RX2
esp:TX2
esp:D5
esp:D18
esp:D19
esp:D21
esp:RX0
esp:TX0
esp:D22
esp:D23
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
oled1:GND
oled1:VCC
oled1:SCL
oled1:SDA
pot1:GND
pot1:SIG
pot1:VCC
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
btn3:1.l
btn3:2.l
btn3:1.r
btn3:2.r
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C