package models

import (
	"time"

	"github.com/golang-jwt/jwt/v5"
	"github.com/google/uuid"
)

// CustomClaims représente les claims JWT pour l'application
// MIGRATION UUID: UserID migré vers uuid.UUID pour cohérence avec User.ID
type CustomClaims struct {
	UserID       uuid.UUID `json:"sub"`
	Email        string    `json:"email"`
	Username     string    `json:"username,omitempty"` // Requis par Rust Chat
	Role         string    `json:"role"`
	TokenVersion int       `json:"token_version"`
	IsRefresh    bool      `json:"is_refresh,omitempty"`
	TokenType    string    `json:"token_type,omitempty"`   // Requis par Rust Chat ("access" ou "refresh")
	TokenFamily  string    `json:"token_family,omitempty"` // Requis par Rust Chat (Refresh rotation)
	jwt.RegisteredClaims
}

// TokenPair représente une paire de tokens
type TokenPair struct {
	AccessToken  string `json:"access_token"`
	RefreshToken string `json:"refresh_token"`
	ExpiresIn    int    `json:"expires_in"`
}

// JWTConfig contient la configuration JWT
type JWTConfig struct {
	AccessTokenTTL            time.Duration
	RefreshTokenTTL           time.Duration
	RememberMeRefreshTokenTTL time.Duration // Ajouté
}
