package helper

import (
	"fmt"
	"testing"
	"time"
)

func TestParse(t *testing.T) {
	got, err := Parse("2024-10-01 10:26:57")
	if err != nil {
		t.Errorf("TestParse() error = %v", err)
		return
	}
	t.Log(got)
	got2, err := Parse2("2024-10-01 10:26:57")
	if err != nil {
		t.Errorf("TestParse() error = %v", err)
		return
	}
	t.Log(got2)
}

func TestDateStringToTime(t *testing.T) {
	got, err := DateStringToTime("2024-01-01 00:00:00")
	if err != nil {
		t.Errorf("DateStringToTime() error = %v", err)
		return
	}
	t.Log(got)
	got2, err := DateStringToTime("2024-01-01 00:00:00")
	if err != nil {
		t.Errorf("DateStringToTime() error = %v", err)
		return
	}
	t.Log(got2)
	t.Log(got.Equal(got2))
}

func TestIsTimeBefore(t *testing.T) {
	bes, err := DateStringToTime("2024-01-12 00:00:00")
	if err != nil {
		t.Errorf("DateStringToTime() error = %v", err)
		return
	}
	bts, err := DateStringToTime("2024-01-20 00:00:00")
	if err != nil {
		t.Errorf("DateStringToTime() error = %v", err)
		return
	}
	b := IsTimeBefore(bes, bts)
	t.Log(b) // false
}

func TestIsInSameNaturalMonth(t *testing.T) {
	startTime, err := DateStringToTime("2024-01-12 12:12:12")
	if err != nil {
		t.Errorf("DateStringToTime() error = %v", err)
		return
	}
	endTime, err := DateStringToTime("2024-02-12 12:12:12")
	if err != nil {
		t.Errorf("DateStringToTime() error = %v", err)
		return
	}
	b := IsInSameNaturalMonth(startTime, endTime)
	t.Log(b) // false
}

func TestRFC3339(t *testing.T) {
	// 输入的时间字符串
	availableBeginTimeStr := "2025-03-07T00:00:00+08:00"
	availableEndTimeStr := "2025-06-05T23:59:59+08:00"

	// 定义输入时间字符串的格式
	inputFormat := time.RFC3339

	// 解析开始时间
	availableBeginTime, err := time.Parse(inputFormat, availableBeginTimeStr)
	if err != nil {
		fmt.Printf("解析开始时间出错: %v\n", err)
		return
	}

	// 解析结束时间
	availableEndTime, err := time.Parse(inputFormat, availableEndTimeStr)
	if err != nil {
		fmt.Printf("解析结束时间出错: %v\n", err)
		return
	}

	// 定义输出时间的格式
	outputFormat := "2006-01-02 15:04:05"

	// 格式化开始时间
	formattedBeginTime := availableBeginTime.Format(outputFormat)
	// 格式化结束时间
	formattedEndTime := availableEndTime.Format(outputFormat)

	// 输出格式化后的时间
	fmt.Printf("格式化后的开始时间: %s\n", formattedBeginTime)
	fmt.Printf("格式化后的结束时间: %s\n", formattedEndTime)
}

func TestDaysBetween(t *testing.T) {
	// 输入的时间字符串
	availableBeginTimeStr := "2025-03-07T00:00:00+08:00"
	availableEndTimeStr := "2025-06-05T23:59:59+08:00"

	// 定义输入时间字符串的格式
	inputFormat := time.RFC3339

	// 解析开始时间
	availableBeginTime, err := time.Parse(inputFormat, availableBeginTimeStr)
	if err != nil {
		fmt.Printf("解析开始时间出错: %v\n", err)
		return
	}

	// 解析结束时间
	availableEndTime, err := time.Parse(inputFormat, availableEndTimeStr)
	if err != nil {
		fmt.Printf("解析结束时间出错: %v\n", err)
		return
	}

	days, err := DaysBetween(availableBeginTime, availableEndTime)
	if err != nil {
		fmt.Printf("解析结束时间出错: %v\n", err)
		return
	}

	t.Log(days)
}
