package directory

import "context"

type Employee struct {
	ID             uint64   `gorm:"primaryKey;autoIncrement" json:"id"`
	Name           string   `gorm:"size:255;not null" json:"name"`
	Email          string   `gorm:"size:255;index" json:"email"`
	LarkUserID     string   `gorm:"size:255;uniqueIndex" json:"lark_user_id,omitempty"`
	DepartmentID   string   `gorm:"size:255;index" json:"department_id,omitempty"`
	DepartmentName string   `gorm:"-" json:"department_name,omitempty"`
	DepartmentIDs  []string `gorm:"-" json:"department_ids,omitempty"`
	Status         string   `gorm:"size:50;default:'active'" json:"status,omitempty"`
	AvatarURL      string   `gorm:"size:512" json:"avatar_url,omitempty"`
	JobTitle       string   `gorm:"size:255" json:"job_title,omitempty"`
}

type Department struct {
	ID               uint64 `gorm:"primaryKey;autoIncrement" json:"id"`
	Name             string `gorm:"size:255;not null" json:"name"`
	LarkDepartmentID string `gorm:"size:255;uniqueIndex" json:"lark_department_id,omitempty"`
	ParentID         string `gorm:"size:255" json:"parent_id,omitempty"`
	LeaderID         string `gorm:"size:255" json:"leader_id,omitempty"`
	Status           string `gorm:"size:50;default:'active'" json:"status,omitempty"`
}

func (Employee) TableName() string {
	return "employees"
}

func (Department) TableName() string {
	return "departments"
}

type EmployeeDirectory interface {
	FindByID(ctx context.Context, id uint64) (*Employee, error)
	FindByEmail(ctx context.Context, email string) (*Employee, error)
	FindByEmails(ctx context.Context, emails []string) ([]Employee, error)
	SearchEmployees(ctx context.Context, query string) ([]Employee, error)
	ListEmployees(ctx context.Context) ([]Employee, error)
}

type DepartmentDirectory interface {
	ListDepartments(ctx context.Context) ([]Department, error)
	GetEmployeesByDepartment(ctx context.Context, departmentID string) ([]Employee, error)
	ListByLarkIDs(ctx context.Context, ids []string) ([]Department, error)
}
