package model

import (
	"database/sql"
	"time"
)

type Player struct {
	PlayerId      int `gorm:"primaryKey"`
	ServerId      int
	PlayerAccount string
	NickName      string
	PlayerLevel   int32
	PlayerExp     int
	BoxLevel      int8
	State         int8
	LastLogin     int64
}

type PlayerResource struct {
	Id             int `gorm:"primaryKey"`
	PlayerId       int
	ResourceId     int
	ResourceAmount int
	CreatedAt      time.Time
	UpdatedAt      sql.NullTime
}

type SysConf struct {
	ID          int `gorm:"primaryKey"`
	ConfName    string
	ConfJson    string
	ConfJsonNew string
}

type Tcp struct {
	TcpId      int    `gorm:"primaryKey" json:"tcp_id"`
	TcpName    string `json:"-"`
	InternalIp string `json:"-"`
	Ip         string `json:"ip"`
	Port       int    `json:"port"`
	MaxUser    uint16 `json:"-"`
	TcpState   uint8  `json:"-"`
}

type ServerWithTcp struct {
	Tcp
	ServerId int `gorm:"primaryKey" json:"server_id"`
	PlayerId int `json:"player_id"`
	CrossId  int `json:"-"`
}

// ChannelUser 渠道用户
type ChannelUser struct {
	UserId    int `gorm:"primaryKey"`
	UserState int8
}

type Version struct {
	VersionId        int `gorm:"primaryKey"`
	VersionName      string
	VersionState     int8
	VersionGrayscale int
	VersionAudit     int8
}

// Notice 公告
type Notice struct {
	Id         int `gorm:"primaryKey"`
	Title      string
	Content    string
	Type       int8
	StartUnix  int
	ExpireUnix int
	Status     int8
	Frequent   int
}

// Order 订单信息
type Order struct {
	Id         int `gorm:"primaryKey"`
	OrderSn    string
	PlayerId   int
	OrderPrice int
	OrderState int
}

// Server 区服信息
type Server struct {
	ServerId        int `gorm:"primaryKey"`
	ServerName      string
	RunningStatus   uint8
	ServerGrayscale uint8
	ServerState     int8
	TcpId           int
	OpenAt          sql.NullTime
}

// PlayerWithServer 玩家角色与区服的关系
type PlayerWithServer struct {
	Player
	Server
}

// Package 包管理
type Package struct {
	PackageId  int `gorm:"primaryKey"`
	Appid      string
	Appsecret  string
	Channelkey string
}
