package model

import (
	"time"

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

type AdminUser struct {
	ID           uuid.UUID      `gorm:"type:uuid;default:gen_random_uuid();primaryKey" json:"id"`
	Username     string         `json:"username"`
	PasswordHash string         `json:"-"`
	Enabled      bool           `json:"enabled"`
	LastLoginAt  *time.Time     `json:"last_login_at"`
	CreatedAt    time.Time      `json:"created_at"`
	UpdatedAt    time.Time      `json:"updated_at"`
	DeletedAt    gorm.DeletedAt `json:"-"`
}

type AdminRefreshToken struct {
	ID        uuid.UUID `gorm:"type:uuid;default:gen_random_uuid();primaryKey"`
	AdminID   uuid.UUID `gorm:"type:uuid"`
	TokenHash string
	ExpiresAt time.Time
	RevokedAt *time.Time
	CreatedAt time.Time
}

type AdminAuditLog struct {
	ID            int64      `json:"id"`
	AdminID       *uuid.UUID `gorm:"type:uuid" json:"admin_id"`
	AdminUsername string     `json:"admin_username"`
	Action        string     `json:"action"`
	ResourceType  string     `json:"resource_type"`
	ResourceID    string     `json:"resource_id"`
	Reason        string     `json:"reason"`
	Detail        string     `gorm:"type:jsonb" json:"detail"`
	IPAddress     string     `gorm:"type:inet" json:"ip_address"`
	TraceID       string     `json:"trace_id"`
	CreatedAt     time.Time  `json:"created_at"`
}

func (AdminUser) TableName() string         { return "admin_users" }
func (AdminRefreshToken) TableName() string { return "admin_refresh_tokens" }
func (AdminAuditLog) TableName() string     { return "admin_audit_logs" }
