package model

import (
	"fmt"
	"strconv"
	"strings"
)

const (
	// IMSI 号码长度
	IMSI_MAX_LENGTH = 15
	// MSISDN 号码长度
	MSISDN_MAX_LENGTH = 15
)

type CallTag int

const (
	TAG_VoIP    CallTag = iota // VoIP标记
	TAG_VoLTE                  // VoLTE标记
	TAG_UNKNOWN                // 未知标记
)

func (ct CallTag) Enum() string {
	switch ct {
	case TAG_VoIP:
		return "VoIP"
	case TAG_VoLTE:
		return "VoLTE"
	default:
		return "unknown"
	}
}

func (ct CallTag) String() string {
	return fmt.Sprintf("%d", ct)
}

// ParseCallTag 将字符串转换为 CallTag 枚举类型
func ParseCallTag(s string) CallTag {
	if i, err := strconv.Atoi(s); err == nil {
		return CallTag(i)
	}
	// 如果转换失败，则按名称匹配（忽略大小写）
	switch strings.ToLower(s) {
	case "voip":
		return TAG_VoIP
	case "volte":
		return TAG_VoLTE
	case "":
		// 如果字符串为空，则返回未知标记
		return TAG_UNKNOWN
	default:
		// 默认返回 VoIP
		return TAG_VoLTE
	}
}

// @Description IMS用户信息
type IMSUser struct {
	ID     string  `json:"id" gorm:"column:id;primaryKey;autoIncrement"` // 主键
	NeId   string  `json:"neId" gorm:"column:ne_id"`                     // UDM网元标识
	IMSI   string  `json:"imsi" gorm:"column:imsi"`                      // SIM卡/USIM卡ID
	MSISDN string  `json:"msisdn" gorm:"column:msisdn"`                  // 用户电话号码
	Tag    CallTag `json:"tag" gorm:"column:tag"`                        // tag: 0=VoIP, 1=VoLTE
	VNI    string  `json:"vni" gorm:"column:vni"`                        // VNI

	TenantID   string `json:"tenantID" gorm:"column:tenant_id"`
	TenantName string `json:"tenantName" gorm:"-"`
}

// TableName 表名称
func (*IMSUser) TableName() string {
	return "u_ims_user"
}
