package domain

import (
	"context"
	"gitlab.fjmaimaimai.com/allied-creation/sumifcc-discuss/cmd/discuss/interanl/pkg/db/transaction"
)

type User struct {
	Id           int64   `json:"id,omitempty"`           // 用户ID
	CompanyId    int64   `json:"companyId,omitempty"`    // 公司ID
	DepartmentId int64   `json:"departmentId,omitempty"` // 部门ID
	Roles        []int64 `json:"roleId,omitempty"`       // 角色
	Flag         int     `json:"flag"`                   // 标识 1:管理员 2:普通用户 (有绑定角色是管理员)
	Name         string  `json:"name,omitempty"`         // 名称
	Avatar       string  `json:"avatar,omitempty"`       // 头像
	Phone        string  `json:"phone,omitempty"`        // 手机号 唯一
	Position     string  `json:"position,omitempty"`     // 职位
	Enable       int     `json:"enable,omitempty"`       // 启用状态 1:启用 2:禁用
	AuditStatus  int     `json:"auditStatus,omitempty"`  // 审核状态 0:待审核 1:审核通过 2:拒绝

	CreatedAt int64 `json:"createdAt,omitempty"`
	UpdatedAt int64 `json:"updatedAt,omitempty"`
	DeletedAt int64 `json:"deletedAt,omitempty"`
	Version   int   `json:"version,omitempty"`
}

type UserRepository interface {
	Insert(ctx context.Context, conn transaction.Conn, dm *User) (*User, error)
	Update(ctx context.Context, conn transaction.Conn, dm *User) (*User, error)
	UpdateWithVersion(ctx context.Context, conn transaction.Conn, dm *User) (*User, error)
	Delete(ctx context.Context, conn transaction.Conn, dm *User) (*User, error)
	FindOne(ctx context.Context, conn transaction.Conn, id int64) (*User, error)
	Find(ctx context.Context, conn transaction.Conn, queryOptions map[string]interface{}) (int64, []*User, error)
}

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