package auth

import (
	"sync"
	"time"
)

// Credential represents an Anthropic API credential loaded from a JSON file.
type Credential struct {
	ID               string
	Email            string
	AccessToken      string
	RefreshToken     string
	ExpiresAt        time.Time
	FilePath         string
	CooldownUntil    time.Time
	nextRefreshAfter time.Time
	mu               sync.Mutex
}

// IsOnCooldown returns true if the credential is currently on cooldown.
func (c *Credential) IsOnCooldown() bool {
	c.mu.Lock()
	defer c.mu.Unlock()
	return time.Now().Before(c.CooldownUntil)
}

// SetCooldown puts the credential on cooldown for the given duration.
func (c *Credential) SetCooldown(duration time.Duration) {
	c.mu.Lock()
	defer c.mu.Unlock()
	c.CooldownUntil = time.Now().Add(duration)
}

// ClearCooldown removes any active cooldown on the credential.
func (c *Credential) ClearCooldown() {
	c.mu.Lock()
	defer c.mu.Unlock()
	c.CooldownUntil = time.Time{}
}

// Token returns the current access token.
func (c *Credential) Token() string {
	c.mu.Lock()
	defer c.mu.Unlock()
	return c.AccessToken
}
