package constant

import (
	"fmt"
)

// UserStatus 用户状态
type UserStatus string

const (
	UserStatusActive   UserStatus = "NORMAL"  // 用户状态正常
	UserStatusDisabled UserStatus = "DISABLE" // 已禁用用户
)

// 状态对应的描述
var userStatusMap = map[UserStatus]string{
	UserStatusActive:   "正常",
	UserStatusDisabled: "已禁用",
}

// 处理为看得懂的状态
func (s UserStatus) String() string {
	if str, ok := userStatusMap[s]; ok {
		return str
	}
	return string(s)
}

// =====================================================================================================================

// UserSex 性别
type UserSex int

const (
	UserSexNone   UserSex = iota // 不知道是啥
	UserSexMale                  // 男
	UserSexFemale                // 女
	UserSexOther                 // 其他性别
)

// 状态对应的描述
var userSexMap = map[UserSex]string{
	UserSexNone:   "无性别",
	UserSexMale:   "男",
	UserSexFemale: "女",
	UserSexOther:  "其他",
}

// FromString 中文取性别
func (s UserSex) FromString(sex string) UserSex {
	result := UserSexNone
	for key, value := range userSexMap {
		if sex == value {
			result = key
			break
		}
	}
	return result
}

// 处理为看得懂的状态
func (s UserSex) String() string {
	if str, ok := userSexMap[s]; ok {
		return str
	}
	//return strconv.Itoa(int(s))
	return fmt.Sprintf("UserSex(%d)", int(s))
}

// MarshalJSON JSON序列化的时候转换为中文
func (s UserSex) MarshalJSON() ([]byte, error) {
	return []byte(`"` + s.String() + `"`), nil
}

// =====================================================================================================================

// UserIdentity 用户身份
type UserIdentity string

const (
	UserIdentityAdmin UserIdentity = "admin" // 管理员
	UserIdentityUser  UserIdentity = "user"  // 普通用户
)

// String implements the Stringer interface.
func (t UserIdentity) String() string {
	return string(t)
}
