package domain

import "time"

// 用户信息
type Users struct {
	// 唯一标识
	Id int64 `json:"id"`
	// 公司id
	CompanyId int64 `json:"companyId"`
	// 统一用户中心 uid
	OpenId int64 `json:"openId"`
	// 名称
	Name string `json:"name"`
	// 性别:0保密 1男 2女
	Sex int8 `json:"sex"`
	// 员工工号
	JobNum string `json:"jobNum"`
	// 手机号码
	Phone string `json:"phone"`
	// 私人手机号码
	PrivatePhone string `json:"privatePhone"`
	// 邮箱
	Email string `json:"email"`
	// 分机号
	ExtensionNum string `json:"extensionNum"`
	// 入职时间
	EntryTime time.Time `json:"entryTime"`
	// 工作地点
	Workspace string `json:"workspace"`
	// 状态 1正常 2禁用
	Status int8 `json:"status"`
	// 手机号
	Avatar string `json:"avatar"`
	// 备注
	Remarks string `json:"remarks"`
	// 是否为当前公司主管 1 是2 否
	ChargeStatus int8 `json:"chargeStatus"`
	// 创建时间
	CreateAt time.Time `json:"createAt"`
	// 更新时间
	UpdateAt time.Time `json:"updateAt"`
	// 删除时间
	DeleteAt time.Time `json:"deleteAt"`
	// 可查看的合伙人信息
	AccessPartners []*PartnerInfo
	// 1普通用户 2主管理员
	AdminType int8 `json:"adminType"`
	// 是否高管
	IsSenior int8 `json:"isSenior"`
}

func (Users *Users) AccessPartnerIds() []int64 {
	var partnerIds []int64
	if Users == nil {
		return partnerIds
	}
	for i := range Users.AccessPartners {
		partnerIds = append(partnerIds, Users.AccessPartners[i].Id)
	}
	return partnerIds
}

type UsersRepository interface {
	Save(dm *Users) (*Users, error)
	Remove(dm *Users) (*Users, error)
	FindOne(queryOptions map[string]interface{}) (*Users, error)
	Find(queryOptions map[string]interface{}) (int64, []*Users, error)
}

//账号是否有效
func (m *Users) IsEnable() bool {
	return m.Status == 1
}

// 账号是否是高管
func (m *Users) IsUserSenior() bool {
	return m.IsSenior == 1
}

func (m *Users) Identify() interface{} {
	if m.Id == 0 {
		return nil
	}
	return m.Id
}