package user

import (
	"tm/pkg/mongo"

	"go.mongodb.org/mongo-driver/bson/primitive"
)

// UserRole represents user roles in the system
type UserRole string

const (
	UserRoleAdmin    UserRole = "admin"
	UserRoleManager  UserRole = "manager"
	UserRoleOperator UserRole = "operator"
	UserRoleViewer   UserRole = "viewer"
)

// UserStatus represents user account status
type UserStatus string

const (
	UserStatusActive    UserStatus = "active"
	UserStatusInactive  UserStatus = "inactive"
	UserStatusSuspended UserStatus = "suspended"
)

// User represents a system user (admin/manager/operator)
type User struct {
	mongo.Model  `bson:",inline"`
	FullName     string     `bson:"full_name"`
	Username     string     `bson:"username"`
	Email        string     `bson:"email"`
	Password     string     `bson:"password" json:"-"`
	Role         UserRole   `bson:"role"`
	Status       UserStatus `bson:"status"`
	Department   *string    `bson:"department"`
	Position     *string    `bson:"position"`
	Phone        *string    `bson:"phone"`
	ProfileImage *string    `bson:"profile_image"`
	IsVerified   bool       `bson:"is_verified"`
	LastLoginAt  *int64     `bson:"last_login_at"`
}

// SetID sets the user ID (implements IDSetter interface)
func (u *User) SetID(id string) {
	u.ID, _ = primitive.ObjectIDFromHex(id)
}

// GetID returns the user ID (implements IDGetter interface)
func (u *User) GetID() string {
	return u.ID.Hex()
}

// SetCreatedAt sets the created timestamp (implements Timestamp interface)
func (u *User) SetCreatedAt(timestamp int64) {
	u.CreatedAt = timestamp
}

// SetUpdatedAt sets the updated timestamp (implements Timestamp interface)
func (u *User) SetUpdatedAt(timestamp int64) {
	u.UpdatedAt = timestamp
}

// GetCreatedAt returns the created timestamp (implements Timestamp interface)
func (u *User) GetCreatedAt() int64 {
	return u.CreatedAt
}

// GetUpdatedAt returns the updated timestamp (implements Timestamp interface)
func (u *User) GetUpdatedAt() int64 {
	return u.UpdatedAt
}
