package m9z

import (
	"encoding/binary"
	"fmt"
	"time"
)

type SunTimes struct {
	Sunrise    time.Time // 日出时间（转换为当日时间对象）
	Sunset     time.Time // 日落时间
	RawSunrise int16     // 原始日出分钟数（从午夜开始的分钟偏移）
	RawSunset  int16     // 原始日落分钟数
}

func SunRiseTimeRead(deviceId string) (*SunTimes, error) {
	cmd, err := ReadCmd(deviceId, sunRiseTime, "读取日出日落时间")
	if err != nil {
		return nil, err
	}
	data := cmd.Data

	// 数据长度校验（至少需要4字节）
	if len(data) < 4 {
		return nil, fmt.Errorf("invalid data length: %d, expect at least 4 bytes", len(data))
	}

	st := &SunTimes{}

	// 1. 解析日出时间（小端序int16）
	st.RawSunrise = int16(binary.LittleEndian.Uint16(data[0:2]))

	// 2. 解析日落时间（小端序int16）
	st.RawSunset = int16(binary.LittleEndian.Uint16(data[2:4]))

	// 转换为当日时间（假设基于UTC的当天）
	toDayFmt := time.Now().Format(time.DateOnly)
	location, _ := time.LoadLocation("Asia/Shanghai")
	baseTime, _ := time.ParseInLocation(time.DateOnly, toDayFmt, location)
	st.Sunrise = baseTime.Add(time.Duration(st.RawSunrise) * time.Minute)
	st.Sunset = baseTime.Add(time.Duration(st.RawSunset) * time.Minute)
	return st, nil
}
