package services

import (
	"fmt"

	"github.com/sujit-baniya/fiber-boilerplate/pkg/models"
)

// GenerarArquitectura produce el PDF de una propuesta técnica a partir de un
// requerimiento en texto libre. Quien llama (Claude) ya consultó
// listar_arquitecturas_referencia para reutilizar patrones ya resueltos en vez de
// improvisar, y trae la propuesta ya armada; el backend solo la renderiza a PDF y,
// si aplica, la deja guardada como nueva referencia reutilizable.
func GenerarArquitectura(requerimiento, propuesta, nombre string, clienteID *uint, guardarComoReferencia bool, generadoPor string) (*models.DocumentoGenerado, error) {
	if requerimiento == "" {
		return nil, fmt.Errorf("requerimiento requerido")
	}
	if propuesta == "" {
		return nil, fmt.Errorf("propuesta requerida")
	}
	if nombre == "" {
		nombre = "Propuesta técnica"
	}

	var cliente *models.Cliente
	if clienteID != nil {
		c, err := models.GetClienteByID(*clienteID)
		if err == nil {
			cliente = c
		}
	}

	datos := DatosBaseDocumento(map[string]interface{}{
		"Nombre":        nombre,
		"Requerimiento": requerimiento,
		"Propuesta":     propuesta,
		"Cliente":       cliente,
	})

	doc, _, err := GenerarDocumento("arquitectura", datos, clienteID, nil, generadoPor)
	if err != nil {
		return nil, err
	}

	if guardarComoReferencia {
		ref := &models.Arquitectura{
			Nombre:        nombre,
			Descripcion:   requerimiento,
			ContenidoHTML: propuesta,
			EsReferencia:  true,
			ClienteID:     clienteID,
		}
		_ = models.CreateArquitectura(ref) // no bloquea la generación del documento si falla
	}

	return doc, nil
}
