package model

import (
	"time"
)

type User struct {
	ID                int        `gorm:"primaryKey;column:id" json:"id"`
	ParentID          *int       `gorm:"column:parent_id" json:"parent_id"`
	InviteUserID      *int       `gorm:"column:invite_user_id" json:"invite_user_id"`
	TelegramID        *int64     `gorm:"column:telegram_id" json:"telegram_id"`
	Email             string     `gorm:"column:email;unique" json:"email"`
	Password          string     `gorm:"column:password" json:"-"`
	PasswordAlgo      *string    `gorm:"column:password_algo" json:"-"`
	PasswordSalt      *string    `gorm:"column:password_salt" json:"-"`
	Balance           uint64     `gorm:"column:balance;default:0" json:"balance"`
	Discount          *int       `gorm:"column:discount" json:"discount"`
	CommissionType    int        `gorm:"column:commission_type;default:0" json:"commission_type"`
	CommissionRate    *int       `gorm:"column:commission_rate" json:"commission_rate"`
	CommissionBalance uint64     `gorm:"column:commission_balance;default:0" json:"commission_balance"`
	T                 uint64     `gorm:"column:t;default:0" json:"t"`
	U                 uint64     `gorm:"column:u;default:0" json:"u"`
	D                 uint64     `gorm:"column:d;default:0" json:"d"`
	TransferEnable    uint64     `gorm:"column:transfer_enable;default:0" json:"transfer_enable"`
	Banned            bool       `gorm:"column:banned" json:"banned"`
	IsAdmin           bool       `gorm:"column:is_admin" json:"is_admin"`
	IsStaff           bool       `gorm:"column:is_staff" json:"is_staff"`
	LastLoginAt       *int64     `gorm:"column:last_login_at" json:"last_login_at"`
	LastLoginIP       *int64     `gorm:"column:last_login_ip" json:"last_login_ip"`
	UUID              string     `gorm:"column:uuid" json:"uuid"`
	GroupID           *int       `gorm:"column:group_id" json:"group_id"`
	PlanID            *int       `gorm:"column:plan_id" json:"plan_id"`
	Plan              *Plan      `gorm:"foreignKey:PlanID" json:"plan"`
	SpeedLimit        *int       `gorm:"column:speed_limit" json:"speed_limit"`
	RemindExpire      int        `gorm:"column:remind_expire;default:1" json:"remind_expire"`
	RemindTraffic     int        `gorm:"column:remind_traffic;default:1" json:"remind_traffic"`
	Token             string     `gorm:"column:token" json:"token"`
	ExpiredAt         *int64     `gorm:"column:expired_at" json:"expired_at"`
	Remarks           *string    `gorm:"column:remarks" json:"remarks"`
	CreatedAt         int64      `gorm:"column:created_at" json:"created_at"`
	UpdatedAt         int64      `gorm:"column:updated_at" json:"updated_at"`
	DeviceLimit       *int       `gorm:"column:device_limit" json:"device_limit"`
	OnlineCount       *int       `gorm:"column:online_count" json:"online_count"`
	LastOnlineAt      *time.Time `gorm:"column:last_online_at" json:"last_online_at"`
	NextResetAt       *int64     `gorm:"column:next_reset_at" json:"next_reset_at"`
	LastResetAt       *int64     `gorm:"column:last_reset_at" json:"last_reset_at"`
	ResetCount        int        `gorm:"column:reset_count;default:0" json:"reset_count"`
}

func (User) TableName() string {
	return "v2_user"
}
