package models

import (
	"github.com/sujit-baniya/fiber-boilerplate/app"
	"gorm.io/gorm"
)

type SoporteWebhookConfig struct {
	gorm.Model
	Activo    bool   `json:"activo" gorm:"column:activo;default:true"`
	Nombre    string `json:"nombre" gorm:"column:nombre;size:100"`
	Provider  string `json:"provider" gorm:"column:provider;size:50;default:'sendgrid'"` // sendgrid|mailgun|generic
	ApiKey    string `json:"api_key" gorm:"column:api_key;size:255"`
	EmailDestino string `json:"email_destino" gorm:"column:email_destino;size:255"` // ej: soporte@u-s.app
	ResponderAuto bool `json:"responder_auto" gorm:"column:responder_auto;default:true"`
	MensajeAuto string `json:"mensaje_auto" gorm:"column:mensaje_auto;type:text"`
	AsignarA    *uint `json:"asignar_a" gorm:"column:asignar_a;index"` // auto-asignar tickets a este user

	// SMTP salida para notificaciones y auto-respuesta
	SmtpHost      string `json:"smtp_host" gorm:"column:smtp_host;size:255"`
	SmtpPort      int    `json:"smtp_port" gorm:"column:smtp_port;default:587"`
	SmtpUsername  string `json:"smtp_username" gorm:"column:smtp_username;size:255"`
	SmtpPassword  string `json:"smtp_password" gorm:"column:smtp_password;size:255"` // cifrado AES
	SmtpEncryption string `json:"smtp_encryption" gorm:"column:smtp_encryption;size:20;default:'tls'"` // tls|starttls|none
	SmtpFromAddr  string `json:"smtp_from_addr" gorm:"column:smtp_from_addr;size:255"`
	SmtpFromName  string `json:"smtp_from_name" gorm:"column:smtp_from_name;size:255"`
}

func (SoporteWebhookConfig) TableName() string { return "soporte_webhook_config" }

func GetSoporteWebhookActivo() (*SoporteWebhookConfig, error) {
	var item SoporteWebhookConfig
	err := app.Http.Database.DB.Where("activo = ?", true).First(&item).Error
	return &item, err
}

func GetAllSoporteWebhookConfigs() ([]SoporteWebhookConfig, error) {
	var items []SoporteWebhookConfig
	err := app.Http.Database.DB.Order("created_at DESC").Find(&items).Error
	return items, err
}

func SaveSoporteWebhookConfig(s *SoporteWebhookConfig) error {
	if s.ID > 0 {
		return app.Http.Database.DB.Model(s).Updates(s).Error
	}
	return app.Http.Database.DB.Create(s).Error
}
