#include "common.h"
#include "preferencesUtil.h"
#include "light.h"
#include "buzzer.h"
#include "net.h"
#include "task.h"

/**
EasyMatrixʱ  汾1.4

θݣ

1.֮ǰĽҳУһ̶ʱᷢüƵͬʱ嶥Դۿۡ
汾УŻ㷨ϵͳᶯ̬״ĸ߶ȡ
2.ʱ们ʱ仯Ǵֱ䡣ʱʾҳ泤1ʱģʽ֮л
3.»˺දŻع˺දʾ߼
4.ʱҳİ1ܱʹãֻڶҳ泤1ſɫ

ע⣺¼ǰ뽫 Erase All Flash ѡѡΪ Enable¼磬ܻд
*/

unsigned long prevDisplay = 0;
unsigned long prevSampling = 0;

void setup() {
  Serial.begin(115200);
  // NVSлȡϢ
  getInfos();
  // ʼ(ʰ)
  initMatrix();
  // ض
  createShowTextTask("START");
  // ʼ
  btnInit();
  Serial.println("ʼɹ");
  // nvsûWiFiϢҳ
  if(apConfig){
    currentPage = SETTING; // ҳΪҳ
    wifiConfigBySoftAP(); // SoftAPWiFi
  }else{
    // WiFi,30볬ʱʾwifiʧܵͼ
    connectWiFi(30); 
    // wifi,ͽNTPʱ,30ʱʧܣͽҳ
    if(wifiConnected){
      checkTime(30);
      if(RTCSuccess){
        // ʱ
        startTickerCheckTime();
        // RTCʱɹӿӵʱ
        if(clockOpen){
          startTickerClock(getClockRemainSeconds());
        }
        // ҳΪʱҳ
        currentPage = TIME; 
        // ֵֹͣĶ
        vTaskDelete(showTextTask);
        delay(300);
        // 
        clearMatrix();
      }
      // رwifi
      disConnectWifi();
    }
  }
}

void loop() { 
  watchBtn();
  if(brightModel == BRIGHT_MODEL_AUTO && ((millis() - prevSampling) >= 1000 || prevSampling > millis())){
    brightSamplingValue+=analogRead(LIGHT_ADC);
    brightSamplingTime++;
    prevSampling = millis();
    if(brightSamplingTime >= BRIGHT_SAMPLING_TIMES){ // ÿֲN¼һֵ
      calculateBrightnessValue();
      clearBrightSampling();
    }
  }
  if(isCheckingTime){ // ʱ
    Serial.println("ʼʱ");
    long start = millis(); // ¼ʼʱʱ
    // ƶʱʾ
    drawCheckTimeText();
    // ִжʱ߼
    checkTimeTicker();
    // ʱ־Ϊfalse
    isCheckingTime = false;
    // ʱ̳4룬Ȼʱ̫̣ʾһ˸о
    while((millis() - start) < 4000){
      delay(200);
    }
    // 
    clearMatrix();
    Serial.println("ʱ");
    // ʱ»֮ǰҳ
    if(currentPage == CLOCK){
      drawClock();
    }else if(currentPage == BRIGHT){
      drawBright();
    }else if(currentPage == ANIM){
      lightedCount = 0;
      memset(matrixArray,0,sizeof(matrixArray));
    }
  }else{
    switch(currentPage){
      case SETTING:  // ҳ
        doClient(); // ͻ
        break;
      case TIME: // ʱҳ       
        if((millis() - prevDisplay) >= 50 || prevDisplay > millis()){
          // ʱ
          drawTime();
          prevDisplay = millis();
        }
        break;
      case RHYTHM: // ҳ
        drawRHYTHM();
        break;
      case ANIM: // ҳ
        drawAnim();
        break;
      case CLOCK: // ҳ
        drawClock();
        break;
      case BRIGHT: // ȵҳ
        drawBright();
        break;  
      default:
        break;
    }
  } 
}


