<?php
/**
 * ASISMA CRM - Avance automático del embudo
 *
 * La bitácora del lead avanza de estado sola según la actividad real:
 * asignación → asignado, primera interacción → contactado, cotización →
 * cotizado, cotización aceptada → negociando, pago → ganado.
 *
 * Regla: el avance automático SOLO va hacia adelante (nunca retrocede a un
 * lead que ya está más avanzado) y no toca leads perdidos/inválidos. Todo
 * avance queda registrado en la bitácora de actividades.
 */
class EmbudoHelper {

    /** Orden de avance del embudo (los terminales negativos van aparte). */
    public static function ordenEstados() {
        return array(
            ESTADO_NUEVO,
            ESTADO_ASIGNADO,
            ESTADO_CONTACTADO,
            ESTADO_COTIZADO,
            ESTADO_NEGOCIANDO,
            ESTADO_FIRMA,
            ESTADO_GANADO
        );
    }

    /**
     * Avanza el lead al estado destino si corresponde (solo hacia adelante).
     * Devuelve true si avanzó, false si no correspondía.
     */
    public static function avanzarAutomatico($leadId, $estadoDestino, $motivo) {
        $db = Database::getInstance();
        $lead = $db->fetchOne("SELECT id, estado_embudo FROM leads WHERE id = :id AND activo = 1", array('id' => (int)$leadId));
        if (!$lead) return false;

        // Los estados terminales negativos no se tocan automáticamente
        if (in_array($lead['estado_embudo'], array(ESTADO_PERDIDO, ESTADO_INVALIDO))) return false;

        $orden = self::ordenEstados();
        $posActual  = array_search($lead['estado_embudo'], $orden);
        $posDestino = array_search($estadoDestino, $orden);
        if ($posDestino === false) return false;
        if ($posActual !== false && $posActual >= $posDestino) return false; // nunca retroceder

        $db->update('leads', array('estado_embudo' => $estadoDestino), "id = :id", array('id' => (int)$leadId));

        $estados = arr_estados_embudo();
        $etiqueta = isset($estados[$estadoDestino]) ? $estados[$estadoDestino]['label'] : $estadoDestino;
        $db->insert('actividades_crm', array(
            'lead_id'    => (int)$leadId,
            'usuario_id' => null,
            'tipo'       => 'sistema',
            'direccion'  => 'interna',
            'asunto'     => 'Estado automático',
            'detalles'   => 'El lead avanzó a "' . $etiqueta . '" automáticamente: ' . $motivo
        ));
        return true;
    }
}
