package models

import (
	"testing"
)

func TestProyectoTicketTableName(t *testing.T) {
	if got := (ProyectoTicket{}).TableName(); got != "proyecto_tickets" {
		t.Errorf("TableName() = %q, want %q", got, "proyecto_tickets")
	}
}

func TestTicketMensajeTableName(t *testing.T) {
	if got := (TicketMensaje{}).TableName(); got != "ticket_mensajes" {
		t.Errorf("TableName() = %q, want %q", got, "ticket_mensajes")
	}
}

func TestProyectoTicketDefaults(t *testing.T) {
	ticket := ProyectoTicket{
		Titulo:      "Test ticket",
		Descripcion: "Descripción",
		AutorNombre: "Cliente",
	}
	if ticket.Estado != "" {
		t.Errorf("Estado debe ser vacío por defecto (GORM default), got %q", ticket.Estado)
	}
	if ticket.Prioridad != "" {
		t.Errorf("Prioridad debe ser vacía por defecto (GORM default), got %q", ticket.Prioridad)
	}
	if ticket.Origen != "" {
		t.Errorf("Origen debe ser vacío por defecto (GORM default), got %q", ticket.Origen)
	}
	if ticket.ProyectoID != nil {
		t.Errorf("ProyectoID debe ser nil por defecto, got %v", ticket.ProyectoID)
	}
	if ticket.PortalUserID != nil {
		t.Errorf("PortalUserID debe ser nil por defecto, got %v", ticket.PortalUserID)
	}
}

func TestProyectoTicketEmailFrom(t *testing.T) {
	ticket := ProyectoTicket{
		EmailFrom:   "cliente@ejemplo.com",
		AutorNombre: "Cliente",
		Titulo:      "Soporte",
		Origen:      "email",
	}
	if ticket.EmailFrom != "cliente@ejemplo.com" {
		t.Errorf("EmailFrom = %q, want %q", ticket.EmailFrom, "cliente@ejemplo.com")
	}
	if ticket.Origen != "email" {
		t.Errorf("Origen = %q, want %q", ticket.Origen, "email")
	}
}

func TestProyectoTicketAsignado(t *testing.T) {
	uid := uint(42)
	ticket := ProyectoTicket{
		AsignadoA: &uid,
	}
	if ticket.AsignadoA == nil {
		t.Fatal("AsignadoA debe ser no nil")
	}
	if *ticket.AsignadoA != 42 {
		t.Errorf("AsignadoA = %d, want %d", *ticket.AsignadoA, 42)
	}
}

func TestProyectoTicketAsignadoNil(t *testing.T) {
	ticket := ProyectoTicket{}
	if ticket.AsignadoA != nil {
		t.Errorf("AsignadoA debe ser nil por defecto, got %v", *ticket.AsignadoA)
	}
}

func TestTicketMensajeDefaults(t *testing.T) {
	msg := TicketMensaje{
		TicketID:   1,
		Contenido:  "Hola",
		AutorNombre: "Admin",
	}
	if msg.EsAdmin {
		t.Error("EsAdmin debe ser false por defecto")
	}
	if msg.LeidoPortal {
		t.Error("LeidoPortal debe ser false por defecto")
	}
}

// CountTicketsByEstado requiere DB real — probado en integration tests
