package user

import (
	"time"

	"github.com/get-drexa/drexa/internal/password"
	"github.com/google/uuid"
	"github.com/uptrace/bun"
)

// User represents a user account in the system
// @Description User account information
type User struct {
	bun.BaseModel `bun:"users" swaggerignore:"true"`

	// Unique user identifier
	ID uuid.UUID `bun:",pk,type:uuid" json:"id" example:"550e8400-e29b-41d4-a716-446655440000"`
	// User's display name
	DisplayName string `bun:"display_name" json:"displayName" example:"John Doe"`
	// User's email address
	Email     string          `bun:"email,unique,notnull" json:"email" example:"john@example.com"`
	Password  password.Hashed `bun:"password,notnull" json:"-" swaggerignore:"true"`
	CreatedAt time.Time       `bun:"created_at,notnull,nullzero" json:"-" swaggerignore:"true"`
	UpdatedAt time.Time       `bun:"updated_at,notnull,nullzero" json:"-" swaggerignore:"true"`
}

func newUserID() (uuid.UUID, error) {
	return uuid.NewV7()
}
