package models

import (
	"time"

	"github.com/google/uuid"
	"gorm.io/gorm"
)

// CorsWhitelist - CORS için izin verilen origin'ler
type CorsWhitelist struct {
	ID          uuid.UUID `gorm:"type:uuid;primary_key" json:"id"`
	Origin      string    `gorm:"type:varchar(255);uniqueIndex;not null" json:"origin"`
	Description string    `gorm:"type:text" json:"description"`
	IsActive    bool      `gorm:"default:true" json:"is_active"`
	CreatedBy   string    `gorm:"type:varchar(255)" json:"created_by,omitempty"`
	CreatedAt   time.Time `json:"created_at"`
	UpdatedAt   time.Time `json:"updated_at"`
}

// BeforeCreate - UUID otomatik oluşturma
func (c *CorsWhitelist) BeforeCreate(tx *gorm.DB) error {
	if c.ID == uuid.Nil {
		c.ID = uuid.New()
	}
	return nil
}

// CorsBlacklist - CORS için yasaklanan origin'ler
type CorsBlacklist struct {
	ID        uuid.UUID `gorm:"type:uuid;primary_key" json:"id"`
	Origin    string    `gorm:"type:varchar(255);uniqueIndex;not null" json:"origin"`
	Reason    string    `gorm:"type:text" json:"reason"`
	IsActive  bool      `gorm:"default:true" json:"is_active"`
	CreatedBy string    `gorm:"type:varchar(255)" json:"created_by,omitempty"`
	CreatedAt time.Time `json:"created_at"`
	UpdatedAt time.Time `json:"updated_at"`
}

// BeforeCreate - UUID otomatik oluşturma
func (c *CorsBlacklist) BeforeCreate(tx *gorm.DB) error {
	if c.ID == uuid.Nil {
		c.ID = uuid.New()
	}
	return nil
}

// RateLimitSetting - Rate limit ayarları
type RateLimitSetting struct {
	ID            uuid.UUID `gorm:"type:uuid;primary_key" json:"id"`
	Name          string    `gorm:"type:varchar(100);uniqueIndex;not null" json:"name"` // e.g., "login", "register", "api"
	Description   string    `gorm:"type:text" json:"description"`
	MaxRequests   int64     `gorm:"not null" json:"max_requests"`   // Max istek sayısı
	WindowSeconds int       `gorm:"not null" json:"window_seconds"` // Zaman penceresi (saniye)
	IsActive      bool      `gorm:"default:true" json:"is_active"`
	UpdatedBy     string    `gorm:"type:varchar(255)" json:"updated_by,omitempty"`
	CreatedAt     time.Time `json:"created_at"`
	UpdatedAt     time.Time `json:"updated_at"`
}

// BeforeCreate - UUID otomatik oluşturma
func (r *RateLimitSetting) BeforeCreate(tx *gorm.DB) error {
	if r.ID == uuid.Nil {
		r.ID = uuid.New()
	}
	return nil
}
