package models

import "database/sql"

func compareAndCopy(sqlResult SQLResult, target *TargetOALicenseInfo) bool {
	// 标志位,初始为 true,表示默认所有值相等
	isEqual := true

	// 辅助函数,用于处理 sql.NullString 类型的比较
	compareAndAssignNullString := func(sqlValue sql.NullString, targetValue *sql.NullString) bool {
		if sqlValue.Valid && (!targetValue.Valid || sqlValue.String != targetValue.String) {
			*targetValue = sqlValue
			return false
		}
		return true
	}

	// 辅助函数,用于处理 sql.NullInt64 类型的比较
	compareAndAssignNullInt64 := func(sqlValue sql.NullInt64, targetValue *sql.NullInt64) bool {
		if sqlValue.Valid && (!targetValue.Valid || sqlValue.Int64 != targetValue.Int64) {
			*targetValue = sqlValue
			return false
		}
		return true
	}

	// 比较 OARequestName
	if !compareAndAssignNullString(sqlResult.OARequestName, &target.OARequestName) {
		isEqual = false
	}

	// 比较 OARequestNameNew
	if !compareAndAssignNullString(sqlResult.OARequestNameNew, &target.OARequestNameNew) {
		isEqual = false
	}

	// 比较 OARequestNameHTMLNew
	if !compareAndAssignNullString(sqlResult.OARequestNameHTMLNew, &target.OARequestNameHTMLNew) {
		isEqual = false
	}

	// 比较 OAGLXMID(处理 sql.NullInt64)
	if !compareAndAssignNullInt64(sqlResult.OAGLXMID, &target.OAGLXMID) {
		isEqual = false
	}

	// 比较 OAGLXMName
	if !compareAndAssignNullString(sqlResult.OAGLXMName, &target.OAGLXMName) {
		isEqual = false
	}

	// 比较 OASQSJ
	if !compareAndAssignNullString(sqlResult.OASQSJ, &target.OASQSJ) {
		isEqual = false
	}

	// 比较 OASalespersonName
	if !compareAndAssignNullString(sqlResult.OASalespersonName, &target.OASalespersonName) {
		isEqual = false
	}

	// 比较 OAOperationsPersonName
	if !compareAndAssignNullString(sqlResult.OAOperationsPersonName, &target.OAOperationsPersonName) {
		isEqual = false
	}

	// 比较 OAXSJSYX
	if !compareAndAssignNullString(sqlResult.OAXSJSYX, &target.OAXSJSYX) {
		isEqual = false
	}

	// 比较 OAJFJSYX
	if !compareAndAssignNullString(sqlResult.OAJFJSYX, &target.OAJFJSYX) {
		isEqual = false
	}

	// 比较 OASYDW
	if !compareAndAssignNullString(sqlResult.OASYDW, &target.OASYDW) {
		isEqual = false
	}

	// 比较 OAXMXXMS
	if !compareAndAssignNullString(sqlResult.OAXMXXMS, &target.OAXMXXMS) {
		isEqual = false
	}

	// 比较 OAJDS(处理 int 类型)
	if sqlResult.OAJDS != target.OAJDS {
		target.OAJDS = sqlResult.OAJDS
		isEqual = false
	}

	// 比较 OANodeCount(处理 int 类型)
	if sqlResult.OANodeCount != target.OANodeCount {
		target.OANodeCount = sqlResult.OANodeCount
		isEqual = false
	}

	// 比较 OAProductName
	if !compareAndAssignNullString(sqlResult.OAProductName, &target.OAProductName) {
		isEqual = false
	}

	// 比较 OAProductVersion
	if !compareAndAssignNullString(sqlResult.OAProductVersion, &target.OAProductVersion) {
		isEqual = false
	}

	// 比较 CLQ(处理 int 类型)
	if sqlResult.CLQ != target.OACPU {
		target.OACPU = sqlResult.CLQ
		isEqual = false
	}

	// 比较 CZXT
	if !compareAndAssignNullString(sqlResult.CZXT, &target.OAOperatingSystem) {
		isEqual = false
	}

	// 比较 IP
	if !compareAndAssignNullString(sqlResult.IP, &target.OAMainMAC) {
		isEqual = false
	}

	// 比较 MAC
	if !compareAndAssignNullString(sqlResult.MAC, &target.OASecondMAC) {
		isEqual = false
	}

	// 比较 OACreationDate
	if !compareAndAssignNullString(sqlResult.OACreationDate, &target.OACreationDate) {
		isEqual = false
	}

	// 比较 OACreationTime
	if !compareAndAssignNullString(sqlResult.OACreationTime, &target.OACreationTime) {
		isEqual = false
	}

	// 比较 OALastOperateDate
	if !compareAndAssignNullString(sqlResult.OALastOperateDate, &target.OALastOperateDate) {
		isEqual = false
	}

	// 比较 OALastOperateTime
	if !compareAndAssignNullString(sqlResult.OALastOperateTime, &target.OALastOperateTime) {
		isEqual = false
	}

	// 返回标志位
	return isEqual
}