<?php
// Habilitar errores para depuración
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// Cargar correctamente autoload.php
require __DIR__ . '/../../vendor/autoload.php';
//require __DIR__ . '/../../../vendor/autoload.php';


use Pusher\Pusher;

class Notificacion {

    private $pusher;

    public function __construct() {
        // Configuración de Pusher
        $options = [
            'cluster' => 'us2', 
            'useTLS'  => true
        ];

        try {
            $this->pusher = new Pusher(
                '01c14cdca26db19318e0',   // API Key
                '72ae4a02574062586697',   // Secret Key
                '1768686',                // App ID
                $options
            );
        } catch (Exception $e) {
            die(json_encode(['success' => false, 'message' => 'Error al conectar con Pusher: ' . $e->getMessage()]));
        }
    }

    /**
     * Envía una notificación simple.
     */
    public function enviarNotificacion() {
        // Datos mínimos para la notificación
        $data = [
            'message' => '🔔 Nueva notificación desde el controlador'
        ];

        // Envía el evento al canal "notifications-channel"
        try {
            $result = $this->pusher->trigger(PUSHER_CHANNEL, 'new-notification', $data);
            if(!$result){
                echo json_encode([
                'success' => true,
                'message' => '❌ Error al enviar la notificación:',
                'result' => $result
                ]);
            }
            
            
        } catch (Exception $e) {
            echo json_encode([
                'success' => false,
                'message' => '❌ Error al enviar la notificación: ' . $e->getMessage()
            ]);
        }
    }

    public function enviarNotificacionMostrador() {
        // Datos mínimos para la notificación
        $data = [
            'message' => '🔔 Nueva notificación desde el controlador'
        ];

        // Envía el evento al canal "notifications-channel"
        try {
            $result = $this->pusher->trigger(PUSHER_CHANNEL, 'notification-mostrador', $data);
            if(!$result){
                echo json_encode([
                'success' => true,
                'message' => '❌ Error al enviar la notificación:',
                'result' => $result
                ]);
            }
            
            
        } catch (Exception $e) {
            echo json_encode([
                'success' => false,
                'message' => '❌ Error al enviar la notificación: ' . $e->getMessage()
            ]);
        }
    }

    public function enviarNotificacionDelivery() {
        // Datos mínimos para la notificación
        $data = [
            'message' => '🔔 Nueva notificación desde el controlador'
        ];

        // Envía el evento al canal "notifications-channel"
        try {
            $result = $this->pusher->trigger(PUSHER_CHANNEL, 'notification-delivery', $data);
            if(!$result){
                echo json_encode([
                'success' => true,
                'message' => '❌ Error al enviar la notificación:',
                'result' => $result
                ]);
            }
            
            
        } catch (Exception $e) {
            echo json_encode([
                'success' => false,
                'message' => '❌ Error al enviar la notificación: ' . $e->getMessage()
            ]);
        }
    }

    public function enviarNotificacionVentaRapida() {
        // Datos mínimos para la notificación
        $data = [
            'message' => '🔔 Nueva notificación desde el controlador'
        ];

        // Envía el evento al canal "notifications-channel"
        try {
            $result = $this->pusher->trigger(PUSHER_CHANNEL, 'notification-ventaRapida', $data);
            if(!$result){
                echo json_encode([
                'success' => true,
                'message' => '❌ Error al enviar la notificación:',
                'result' => $result
                ]);
            }
            
            
        } catch (Exception $e) {
            echo json_encode([
                'success' => false,
                'message' => '❌ Error al enviar la notificación: ' . $e->getMessage()
            ]);
        }
    }

    /**
     * Notifica la reposición de stock en tiempo real
     * @param array $data Datos del stock recuperado (items_pres, items_insumos, etc)
     */
    public function notificarReposicionStock($data) {
        try {
            // Trigger 'stock-update' event on PUSHER_CHANNEL
            $this->pusher->trigger(PUSHER_CHANNEL, 'stock-update', $data);
        } catch (Exception $e) {
            // Silently fail or log, don't break the response
            error_log("Error Pusher stock-update: " . $e->getMessage());
        }
    }

    /**
     * Notifica a pantallas de produccion para refresco en tiempo real.
     * Se usa para altas, anulaciones y cambios de estado operativos.
     */
    public function notificarProduccionTiempoReal($data = []) {
        try {
            $payload = is_array($data) ? $data : [];
            if (!isset($payload['timestamp'])) {
                $payload['timestamp'] = time();
            }
            $this->pusher->trigger(PUSHER_CHANNEL, 'production-refresh', $payload);
        } catch (Exception $e) {
            error_log("Error Pusher production-refresh: " . $e->getMessage());
        }
    }
}
