package session

import (
	"enterprise/common/config"
	"enterprise/common/model"
	"reflect"
)

var (
	ContextSession      = "session"
	ContextRequest      = "request"
	ContextResponse     = "response"
	ContextHeader       = "header"
	ContextWriteEvent   = "write_event"
	ContextRefreshToken = "refresh_token"
)

type AdminHeader struct {
	Token    string `header:"x-token" json:"-"`
	Host     string `header:"x-host" json:"-"`
	RemoteIp string `header:"x-remote-ip" json:"public_ip"`
}

type AdminSession struct {
	adminHeader *AdminHeader
	adminUser   *model.StaffUser
}

func NewAdminSession(header *AdminHeader, user *model.StaffUser) *AdminSession {
	return &AdminSession{
		adminHeader: header,
		adminUser:   user,
	}
}

func (s *AdminSession) GetHeader() *AdminHeader {
	return s.adminHeader
}

func (s *AdminSession) GetAdmin() *model.StaffUser {
	return s.adminUser
}

func (s *AdminSession) GetCorpId() int64 {
	return s.adminUser.CorpId
}

func (s *AdminSession) GetUsername() string {
	if s.adminUser != nil {
		return s.adminUser.Username
	}
	return ""
}

func CheckDBError(err error) {
	if err != nil {
		panic(config.ErrDb.New().Append(err))
	}
}

func CheckParamError(err error) {
	if err != nil {
		panic(config.ErrParam.New().Append(err))
	}
}

func CheckNilError(data interface{}, args ...string) {
	val := reflect.ValueOf(data)
	if val.IsNil() {
		panic(config.ErrNoData.New().Append(args))
	}
}