package lzUtils

import (
	"database/sql"
	"time"
)

// StringToNullString 将 string 转换为 sql.NullString
func StringToNullString(s string) sql.NullString {
	return sql.NullString{
		String: s,
		Valid:  s != "",
	}
}

// NullStringToString 将 sql.NullString 转换为 string
func NullStringToString(ns sql.NullString) string {
	if ns.Valid {
		return ns.String
	}
	return ""
}

// TimeToNullTime 将 time.Time 转换为 sql.NullTime
func TimeToNullTime(t time.Time) sql.NullTime {
	return sql.NullTime{
		Time:  t,
		Valid: !t.IsZero(), // 仅当 t 不是零值时才设置为有效
	}
}

// NullTimeToTime 将 sql.NullTime 转换为 time.Time
func NullTimeToTime(nt sql.NullTime) time.Time {
	if nt.Valid {
		return nt.Time
	}
	return time.Time{} // 返回零值时间
}

// Int64ToNullInt64 将 int64 转换为 sql.NullInt64
func Int64ToNullInt64(i int64) sql.NullInt64 {
	return sql.NullInt64{
		Int64: i,
		Valid: i != 0, // 仅当 i 非零时才设置为有效
	}
}

// NullInt64ToInt64 将 sql.NullInt64 转换为 int64
func NullInt64ToInt64(ni sql.NullInt64) int64 {
	if ni.Valid {
		return ni.Int64
	}
	return 0 // 返回零值 int64
}

// Float64ToNullFloat64 将 float64 转换为 sql.NullFloat64
// Valid 字段在 f 非零时设置为有效（注意：NaN 会被视为有效，需结合业务场景使用）
func Float64ToNullFloat64(f float64) sql.NullFloat64 {
	return sql.NullFloat64{
		Float64: f,
		Valid:   f != 0,
	}
}

// NullFloat64ToFloat64 将 sql.NullFloat64 转换为 float64
// 当 Valid 为 false 时，返回 float64 零值
func NullFloat64ToFloat64(nf sql.NullFloat64) float64 {
	if nf.Valid {
		return nf.Float64
	}
	return 0.0
}
