package session

import "time"

// Session represents a user authentication session (domain entity)
type Session struct {
	UserID       string
	Email        string
	AccessToken  string
	RefreshToken string
	ExpiresAt    time.Time
	CreatedAt    time.Time

	// Encrypted user data for password verification (stored during login)
	Salt                string // Base64 encoded salt for password derivation
	EncryptedMasterKey  string // Base64 encoded encrypted master key
	EncryptedPrivateKey string // Base64 encoded encrypted private key
	PublicKey           string // Base64 encoded public key
	KDFAlgorithm        string // Key derivation algorithm: "PBKDF2-SHA256"
}

// IsExpired checks if the session has expired
func (s *Session) IsExpired() bool {
	return time.Now().After(s.ExpiresAt)
}

// IsValid checks if the session is valid (not expired and has tokens)
func (s *Session) IsValid() bool {
	return !s.IsExpired() && s.AccessToken != "" && s.RefreshToken != ""
}
