<?php
/**
 * ASISMA CRM - Operaciones Controller (Post-Venta)
 */
class OperacionesController extends Controller {

    public function index() {
        $db = Database::getInstance();
        $where = "1=1";
        $params = [];

        // Filtro de Tenant (Franquiciado)
        if (!SessionHelper::isAdmin()) {
            $franquiciadoId = SessionHelper::getFranquiciadoId();
            $where = "op.franquiciado_id = :fid";
            $params['fid'] = $franquiciadoId;
        }

        $sql = "SELECT op.*, 
                       l.contacto_id, con.nombre as cliente_contacto, e.razon_social as cliente_razon_social,
                       m.nombre as marca_nombre,
                       ef.nombre_fantasia as franquiciado_nombre
                FROM operaciones_marca op
                INNER JOIN leads l ON op.lead_id = l.id
                INNER JOIN empresas e ON l.empresa_id = e.id
                INNER JOIN contactos con ON l.contacto_id = con.id
                INNER JOIN marcas m ON op.marca_id = m.id
                INNER JOIN franquiciados f ON op.franquiciado_id = f.id
                INNER JOIN empresas_franquiciados ef ON f.empresa_madre_id = ef.id
                WHERE {$where}
                ORDER BY op.updated_at DESC";

        $operaciones = $db->fetchAll($sql, $params);

        $this->render('operaciones/index', [
            'title' => 'Seguimiento de Implementación (Post-Venta)',
            'operaciones' => $operaciones
        ]);
    }

    /**
     * Actualizar Estado de Implementación (AJAX)
     */
    public function actualizarEstado() {
        if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
            $this->json(['success' => false, 'message' => 'Método no soportado.'], 405);
        }

        $id = (int)$this->input('id');
        $nuevoEstado = $this->input('estado_implementacion');
        $notas = $this->input('notas', '');

        if ($id <= 0 || empty($nuevoEstado)) {
            $this->json(['success' => false, 'message' => 'Datos obligatorios incompletos.']);
        }

        if (!array_key_exists($nuevoEstado, arr_estados_implementacion())) {
            $this->json(['success' => false, 'message' => 'El estado de implementación no es válido.']);
        }

        $db = Database::getInstance();
        
        // Restringir por Tenant
        $op = $db->fetchOne("SELECT * FROM operaciones_marca WHERE id = :id", ['id' => $id]);
        if (!$op || (!SessionHelper::isAdmin() && $op['franquiciado_id'] != SessionHelper::getFranquiciadoId())) {
            $this->json(['success' => false, 'message' => 'No tiene permisos para modificar esta operación.']);
        }

        $db->beginTransaction();
        try {
            $db->update('operaciones_marca', [
                'estado_implementacion' => $nuevoEstado,
                'notas' => $notas
            ], "id = :id", ['id' => $id]);

            // Registrar actividad en el Lead
            $db->insert('actividades_crm', [
                'lead_id' => $op['lead_id'],
                'usuario_id' => SessionHelper::getUsuarioId(),
                'tipo' => 'sistema',
                'direccion' => 'interna',
                'asunto' => 'Estado implementación modificado',
                'detalles' => "El estado de post-venta para la marca se actualizó a: " . arr_estados_implementacion()[$nuevoEstado]['label'] . ".\nNotas: " . $notas
            ]);

            AuditHelper::log('update_operation_state', 'operaciones_marca', $id, ['estado' => $op['estado_implementacion']], ['estado' => $nuevoEstado]);

            $db->commit();
            $this->json(['success' => true, 'message' => 'Estado de post-venta actualizado correctamente.']);

        } catch (Exception $e) {
            $db->rollBack();
            error_log("Error al actualizar estado operaciones: " . $e->getMessage());
            $this->json(['success' => false, 'message' => 'Error al guardar cambios en base de datos.']);
        }
    }
}
