package main

import (
	"ZhenTuLocalPassiveAdapter/api"
	"ZhenTuLocalPassiveAdapter/config"
	"ZhenTuLocalPassiveAdapter/core"
	"ZhenTuLocalPassiveAdapter/dto"
	"log"
	"os"
	"time"
)

func startTask(device config.DeviceMapping, task dto.Task) {
	fo, err := core.HandleTask(device, task)
	if err != nil {
		log.Printf("处理任务失败, TaskID:【%s】, DeviceNo: %s, 错误: %v\n", task.TaskID, task.DeviceNo, err)
		api.ReportTaskFailure(task.TaskID)
		return
	}
	log.Printf("处理任务成功, TaskID:【%s】, DeviceNo: %s\n", task.TaskID, task.DeviceNo)
	err = api.UploadTaskFile(task, *fo)
	if err != nil {
		log.Printf("上传文件失败, TaskID:【%s】, DeviceNo: %s, 错误: %v\n", task.TaskID, task.DeviceNo, err)
		api.ReportTaskFailure(task.TaskID)
		return
	}
	log.Printf("上传文件成功, TaskID:【%s】, DeviceNo: %s\n", task.TaskID, task.DeviceNo)
	api.ReportTaskSuccess(task.TaskID, fo)
}

func main() {
	err := config.LoadConfig()
	if err != nil {
		log.Println("加载配置文件失败:", err)
		return
	}
	// 日志文件路径
	logFilePath := "app.log"

	// 创建或打开日志文件
	logFile, err := os.OpenFile(logFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
	if err != nil {
		log.Fatalf("Failed to open log file: %v", err)
	}
	defer logFile.Close()

	// 设置日志输出到文件
	log.SetOutput(logFile)
	// 每两秒定时执行
	for {
		// 执行任务
		tasks, err := api.SyncTask()
		if err == nil {
			for _, task := range tasks {
				log.Printf("开始处理任务, TaskID:【%s】,DeviceNo: %s,开始时间: %s,结束时间: %s\n", task.TaskID, task.DeviceNo, task.StartTime, task.EndTime)
				// 处理任务
				for _, device := range config.Config.Devices {
					if device.DeviceNo == task.DeviceNo {
						// 处理任务
						go startTask(device, task)
						break // 提前返回,避免不必要的循环
					}
				}
				log.Printf("处理任务结束, TaskID:【%s】,DeviceNo: %s\n", task.TaskID, task.DeviceNo)
			}
		} else {
			log.Println("同步任务失败:", err)
		}
		// 等待两秒
		<-time.After(2 * time.Second)
	}
}