/**
 * EN: User role enumeration for authorization levels
 * VI: Enumeration vai trò người dùng cho các cấp độ phân quyền
 */
export enum Role {
  /** EN: Standard user role / VI: Vai trò người dùng tiêu chuẩn */
  USER = 'USER',
  /** EN: Administrator role with elevated permissions / VI: Vai trò quản trị viên với quyền cao hơn */
  ADMIN = 'ADMIN',
  /** EN: Super administrator with full system access / VI: Siêu quản trị viên với quyền truy cập đầy đủ hệ thống */
  SUPER_ADMIN = 'SUPER_ADMIN',
}

/**
 * EN: User entity interface for database operations
 * VI: Interface thực thể người dùng cho các thao tác database
 */
export interface User {
  /** EN: Unique user identifier / VI: Mã định danh duy nhất người dùng */
  id: string;
  /** EN: User email address (unique) / VI: Địa chỉ email người dùng (duy nhất) */
  email: string;
  /** EN: User role for authorization / VI: Vai trò người dùng để phân quyền */
  role: Role;
  /** EN: Account active status / VI: Trạng thái hoạt động tài khoản */
  isActive: boolean;
  /** EN: Account creation timestamp / VI: Timestamp tạo tài khoản */
  createdAt: Date;
  /** EN: Last update timestamp / VI: Timestamp cập nhật cuối */
  updatedAt: Date;
}

/**
 * EN: Data transfer object for creating new users
 * VI: Đối tượng truyền dữ liệu để tạo người dùng mới
 */
export interface CreateUserDto {
  /** EN: User email address / VI: Địa chỉ email người dùng */
  email: string;
  /** EN: User password / VI: Mật khẩu người dùng */
  password: string;
  /** EN: User role (optional, defaults to USER) / VI: Vai trò người dùng (tùy chọn, mặc định là USER) */
  role?: Role;
}

/**
 * EN: Data transfer object for updating user information
 * VI: Đối tượng truyền dữ liệu để cập nhật thông tin người dùng
 */
export interface UpdateUserDto {
  /** EN: New email address (optional) / VI: Địa chỉ email mới (tùy chọn) */
  email?: string;
  /** EN: New user role (optional) / VI: Vai trò người dùng mới (tùy chọn) */
  role?: Role;
  /** EN: Account active status (optional) / VI: Trạng thái hoạt động tài khoản (tùy chọn) */
  isActive?: boolean;
}

/**
 * EN: User response interface for API responses (with string timestamps)
 * VI: Interface phản hồi người dùng cho API responses (với string timestamps)
 */
export interface UserResponse {
  /** EN: Unique user identifier / VI: Mã định danh duy nhất người dùng */
  id: string;
  /** EN: User email address / VI: Địa chỉ email người dùng */
  email: string;
  /** EN: User role for authorization / VI: Vai trò người dùng để phân quyền */
  role: Role;
  /** EN: Account active status / VI: Trạng thái hoạt động tài khoản */
  isActive: boolean;
  /** EN: Account creation timestamp (ISO string) / VI: Timestamp tạo tài khoản (ISO string) */
  createdAt: string;
  /** EN: Last update timestamp (ISO string) / VI: Timestamp cập nhật cuối (ISO string) */
  updatedAt: string;
}
