#include <WiFi.h>
#include <WebServer.h>

// WiFi配置
const char* ap_ssid = "ESP32_Config";
const char* ap_password = "12345678";

// Web Server实例
WebServer server(80);

// 存储配置
String wifi_ssid = "";
String wifi_password = "";
int timezone = 8;

void setup() {
  Serial.begin(115200);
  
  // 启动AP模式
  WiFi.softAP(ap_ssid, ap_password);
  Serial.println("AP模式已启动");
  Serial.print("IP地址: ");
  Serial.println(WiFi.softAPIP());

  // 配置路由
  server.on("/", handleRoot);
  server.on("/save", handleSave);
  
  // 启动Web Server
  server.begin();
  Serial.println("HTTP服务器已启动");
}

void loop() {
  server.handleClient();
}

// 处理根路径请求
void handleRoot() {
  // 读取HTML文件内容
  String html = R"=====(
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>设备配置</title>
    <style>
      /* 样式内容 */
    </style>
</head>
<body>
    <div class="container">
        <h1>设备配置</h1>
        <form id="config-form" action="/save" method="POST">
            <div class="form-group">
                <label for="wifi-ssid">WiFi SSID</label>
                <input type="text" id="wifi-ssid" name="wifi-ssid" required>
            </div>
            <div class="form-group">
                <label for="wifi-password">WiFi 密码</label>
                <input type="password" id="wifi-password" name="wifi-password">
            </div>
            <div class="form-group">
                <label for="timezone">时区</label>
                <select id="timezone" name="timezone">
                    <option value="8">GMT+8 中国标准时间</option>
                    <option value="0">GMT 格林威治时间</option>
                    <option value="-5">GMT-5 美国东部时间</option>
                </select>
            </div>
            <button type="submit">保存配置</button>
        </form>
    </div>
    <script>
      // JavaScript内容
    </script>
</body>
</html>
)=====";
  
  server.send(200, "text/html", html);
}

// 处理保存配置请求
void handleSave() {
  if (server.method() == HTTP_POST) {
    // 获取表单数据
    wifi_ssid = server.arg("wifi-ssid");
    wifi_password = server.arg("wifi-password");
    timezone = server.arg("timezone").toInt();
    
    // 保存配置到EEPROM（可选）
    // saveConfigToEEPROM();
    
    // 返回成功响应
    server.send(200, "text/plain", "配置保存成功");
    
    // 尝试连接新配置的WiFi
    connectToWiFi();
  }
}

// 连接WiFi
void connectToWiFi() {
  if (wifi_ssid.length() > 0) {
    Serial.println("正在连接WiFi...");
    WiFi.begin(wifi_ssid.c_str(), wifi_password.c_str());
    
    int retry = 0;
    while (WiFi.status() != WL_CONNECTED && retry < 10) {
      delay(1000);
      Serial.print(".");
      retry++;
    }
    
    if (WiFi.status() == WL_CONNECTED) {
      Serial.println("\nWiFi连接成功");
      Serial.print("IP地址: ");
      Serial.println(WiFi.localIP());
    } else {
      Serial.println("\nWiFi连接失败");
    }
  }
}
