package model

import (
	"time"

	"gorm.io/gorm"
)

// ProviderGroup represents a shared upstream definition.
type ProviderGroup struct {
	gorm.Model
	Name            string  `gorm:"size:255;uniqueIndex;not null" json:"name"`
	Type            string  `gorm:"size:50;not null" json:"type"` // openai, anthropic, gemini
	BaseURL         string  `gorm:"size:512;not null" json:"base_url"`
	GoogleProject   string  `gorm:"size:128" json:"google_project,omitempty"`
	GoogleLocation  string  `gorm:"size:64" json:"google_location,omitempty"`
	StaticHeaders   string  `gorm:"type:text" json:"static_headers,omitempty"`
	HeadersProfile  string  `gorm:"size:64" json:"headers_profile,omitempty"`
	Models          string  `json:"models"` // comma-separated list of supported models
	Status          string  `gorm:"size:50;default:'active'" json:"status"`
	TotalRequests   int64   `gorm:"default:0" json:"total_requests"`
	SuccessRequests int64   `gorm:"default:0" json:"success_requests"`
	FailureRequests int64   `gorm:"default:0" json:"failure_requests"`
	SuccessRate     float64 `gorm:"default:0" json:"success_rate"`
	FailureRate     float64 `gorm:"default:0" json:"failure_rate"`
}

// APIKey represents a credential within a provider group.
type APIKey struct {
	gorm.Model
	GroupID         uint       `gorm:"not null;index" json:"group_id"`
	APIKey          string     `gorm:"not null" json:"api_key"`
	AccessToken     string     `gorm:"type:text" json:"access_token,omitempty"`
	RefreshToken    string     `gorm:"type:text" json:"-"`
	ExpiresAt       *time.Time `json:"expires_at,omitempty"`
	AccountID       string     `gorm:"size:255" json:"account_id,omitempty"`
	ProjectID       string     `gorm:"size:255" json:"project_id,omitempty"`
	Weight          int        `gorm:"default:1" json:"weight"`
	Status          string     `gorm:"size:50;default:'active'" json:"status"`
	AutoBan         bool       `gorm:"default:true" json:"auto_ban"`
	BanReason       string     `gorm:"size:255" json:"ban_reason"`
	BanUntil        *time.Time `json:"ban_until"`
	TotalRequests   int64      `gorm:"default:0" json:"total_requests"`
	SuccessRequests int64      `gorm:"default:0" json:"success_requests"`
	FailureRequests int64      `gorm:"default:0" json:"failure_requests"`
	SuccessRate     float64    `gorm:"default:0" json:"success_rate"`
	FailureRate     float64    `gorm:"default:0" json:"failure_rate"`
}
