package models

import (
	"time"

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

// ClienteDocumento almacena los archivos adjuntos de un cliente.
type ClienteDocumento struct {
	gorm.Model
	ClienteID       uint       `json:"cliente_id"       gorm:"column:cliente_id;not null;index"`
	Nombre          string     `json:"nombre"           gorm:"column:nombre"`          // nombre descriptivo del doc
	Archivo         string     `json:"archivo"          gorm:"column:archivo"`          // ruta relativa en disco
	OriginalName    string     `json:"original_name"    gorm:"column:original_name"`   // nombre original del archivo
	TipoMime        string     `json:"tipo_mime"        gorm:"column:tipo_mime"`
	Tamanio         int64      `json:"tamanio"          gorm:"column:tamanio"`          // bytes
	FechaExpedicion *time.Time `json:"fecha_expedicion" gorm:"column:fecha_expedicion"` // opcional
}

func (ClienteDocumento) TableName() string { return "cliente_documentos" }

func GetDocumentosByCliente(clienteID uint) ([]ClienteDocumento, error) {
	var items []ClienteDocumento
	err := app.Http.Database.DB.
		Where("cliente_id = ?", clienteID).
		Order("created_at DESC").
		Find(&items).Error
	return items, err
}

func CreateClienteDocumento(d *ClienteDocumento) error {
	return app.Http.Database.DB.Create(d).Error
}

func GetClienteDocumentoByID(id uint) (*ClienteDocumento, error) {
	var d ClienteDocumento
	if err := app.Http.Database.DB.First(&d, id).Error; err != nil {
		return nil, err
	}
	return &d, nil
}

func DeleteClienteDocumento(id uint) error {
	return app.Http.Database.DB.Delete(&ClienteDocumento{}, id).Error
}
