package controllers

import (
	"database/sql"
	"reflect"
	"xugu_license/internal/models"
)

// compareNullInt32 compares two sql.NullInt32 values
func compareNullInt32(a, b sql.NullInt32) bool {
	return a.Valid == b.Valid && (!a.Valid || a.Int32 == b.Int32)
}

// compareNullInt64 compares two sql.NullInt64 values
func compareNullInt64(a, b sql.NullInt64) bool {
	return a.Valid == b.Valid && (!a.Valid || a.Int64 == b.Int64)
}

// compareNullString compares two sql.NullString values
func compareNullString(a, b sql.NullString) bool {
	return a.Valid == b.Valid && (!a.Valid || a.String == b.String)
}

// compareNullTime compares two sql.NullTime values
func compareNullTime(a, b sql.NullTime) bool {
	return a.Valid == b.Valid && (!a.Valid || a.Time.Equal(b.Time))
}

// compareOALicenseInfo compares two OALicenseInfo structs
func compareOALicenseInfo(a, b models.OALicenseInfo) bool {
	return reflect.DeepEqual(a.LicInfo, b.LicInfo) && reflect.DeepEqual(a.GenrateInfo, b.GenrateInfo)
}

// CompareOALicenseInfo compares two OALicenseInfo structs
func CompareOALicenseInfo(a, b *models.OALicenseInfo) bool {
	if a == nil || b == nil {
		return a == b // 如果其中一个是 nil 则只有两者都为 nil 才相等
	}

	// 使用 reflect.DeepEqual 递归比较两个结构体
	return reflect.DeepEqual(a.LicInfo, b.LicInfo) && reflect.DeepEqual(a.GenrateInfo, b.GenrateInfo)
}