package services

import (
	"fmt"
	"strings"

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

func slugifyProyecto(s string) string {
	s = strings.ToLower(s)
	replacer := strings.NewReplacer(
		" ", "-", "á", "a", "é", "e", "í", "i", "ó", "o", "ú", "u",
		"ñ", "n", "ü", "u",
	)
	s = replacer.Replace(s)
	var b strings.Builder
	for _, r := range s {
		if (r >= 'a' && r <= 'z') || (r >= '0' && r <= '9') || r == '-' {
			b.WriteRune(r)
		}
	}
	return strings.Trim(b.String(), "-")
}

// CrearProyectoSimple crea un proyecto para un cliente a partir del flujo de
// automatización con IA ("nombre, stack, cliente asociado"). El stack se antepone
// a la descripción; la creación de repo/estructura inicial queda fuera de este
// alcance (requiere integración con un proveedor Git, no cubierta aún).
func CrearProyectoSimple(clienteID uint, nombre, stack, descripcion string) (*models.Proyecto, error) {
	if clienteID == 0 {
		return nil, fmt.Errorf("cliente_id requerido")
	}
	if strings.TrimSpace(nombre) == "" {
		return nil, fmt.Errorf("nombre requerido")
	}
	if stack != "" {
		descripcion = fmt.Sprintf("Stack: %s\n\n%s", stack, descripcion)
	}
	p := &models.Proyecto{
		ClienteID:   clienteID,
		Nombre:      nombre,
		Slug:        slugifyProyecto(nombre),
		Descripcion: descripcion,
		Color:       "#8eb02f",
		Estado:      "activo",
	}
	if err := models.CreateProyecto(p); err != nil {
		return nil, fmt.Errorf("no se pudo crear el proyecto: %w", err)
	}
	return p, nil
}
