<?php
//Incluimos conexion a la base de 
date_default_timezone_set('America/Lima');
require_once('../config/Conexion.php');

Class Pabellon
{
  //Implementando nuestro constructor
  public function __construct()
  {

  }
    
        function numeroARomano($numero) {
            $valores = [
                1000 => 'M', 900 => 'CM', 500 => 'D', 400 => 'CD',
                100 => 'C', 90 => 'XC', 50 => 'L', 40 => 'XL',
                10 => 'X', 9 => 'IX', 5 => 'V', 4 => 'IV', 1 => 'I'
            ];

            $romano = '';
            foreach ($valores as $valor => $letra) {
                while ($numero >= $valor) {
                    $romano .= $letra;
                    $numero -= $valor;
                }
            }
            return $romano;
        }
     
        public function insertar($nombre, $total_fila, $total_columna, $imagen) {
            global $conexion;

            mysqli_begin_transaction($conexion);

            try {
                $sql = "INSERT INTO pabellon(nombre, total_fila, total_columna, imagen) 
                        VALUES ('$nombre', '$total_fila', '$total_columna', '$imagen')";
                $idpabellon = ejecutarConsulta_retornarID($sql);

                if (!$idpabellon) {
                    throw new Exception("Error al insertar en la tabla pabellon.");
                }
                // Insertar detalle de pabellón
                    $abecedario = [
                        'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
                        'K', 'L','LL', 'M', 'N', 'Ñ', 'O', 'P', 'Q', 'R', 'S',
                        'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
                    ];

                    for ($fila = 1; $fila <= $total_fila; $fila++) {
                        for ($columna = 1; $columna <= $total_columna; $columna++) {
                            if ($columna <= count($abecedario)) {
                                $abc = $abecedario[$columna - 1];
                            } else {
                                $abc = $this->numeroARomano($columna - count($abecedario));
                            }

                            $sql_detalle = "INSERT INTO detalle_pabellon(idpabellon, fila, columna, precio_venta, estado_nicho, abc) 
                                            VALUES ('$idpabellon', '$fila', '$columna', '0', '1', '$abc')";

                            $resultado_detalle = ejecutarConsulta($sql_detalle);
                            if (!$resultado_detalle) {
                                throw new Exception("Error al insertar fila $fila y columna $columna.");
                            }
                        }
                    }
                mysqli_commit($conexion);
                return true;

            } catch (Exception $e) {
                mysqli_rollback($conexion);
                echo "❌ Error: " . $e->getMessage();
                return false;
            }
        }

    
    // Método para editar
    public function editar($idpabellon,$nombre, $total_fila, $total_columna, $imagen) {
      
        global $conexion;

        // Iniciar transacción para asegurar integridad
        mysqli_begin_transaction($conexion);

        try {
            // Insertar el pabellón
            $sql = "UPDATE pabellon SET nombre='$nombre',total_fila='$total_fila',total_columna='$total_columna',imagen='$imagen' WHERE idpabellon='$idpabellon'";
            $result = ejecutarConsulta($sql);

            if (!$result) {
                throw new Exception("Error al actualizar en la tabla pabellon.");
            }

            // $sql2 = "DELETE FROM detalle_pabellon WHERE idpabellon='$idpabellon'";
            // $result2 = ejecutarConsulta($sql2);
            // // Insertar detalle de pabellón
            // // Insertar detalle de pabellón
            // $abecedario = [
            //             'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
            //             'K', 'L','LL', 'M', 'N', 'Ñ', 'O', 'P', 'Q', 'R', 'S',
            //             'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
            //         ];

            //         for ($fila = 1; $fila <= $total_fila; $fila++) {
            //             for ($columna = 1; $columna <= $total_columna; $columna++) {
            //                 if ($columna <= count($abecedario)) {
            //                     $abc = $abecedario[$columna - 1];
            //                 } else {
            //                     $abc = $this->numeroARomano($columna - count($abecedario));
            //                 }

            //                 $sql_detalle = "INSERT INTO detalle_pabellon(idpabellon, fila, columna, precio_venta, estado_nicho, abc) 
            //                                 VALUES ('$idpabellon', '$fila', '$columna', '0', '1', '$abc')";

            //                 $resultado_detalle = ejecutarConsulta($sql_detalle);
            //                 if (!$resultado_detalle) {
            //                     throw new Exception("Error al insertar fila $fila y columna $columna.");
            //                 }
            //             }
            //         }

            // Confirmar transacción
            mysqli_commit($conexion);
            return true;

        } catch (Exception $e) {
            // Revertir todos los cambios si algo falla
            mysqli_rollback($conexion);
            echo "❌ Error: " . $e->getMessage();
            return false;
        }
    }

    public function insertarActualizar($iddetalle_pabellon,$idpabellon,$idpersona,$fila,$columna,$estado_nicho){

        $update_nicho="UPDATE detalle_pabellon SET fila='$fila',columna='$columna', estado_nicho='$estado_nicho',idpersona='$idpersona' WHERE iddetalle_pabellon='$iddetalle_pabellon'";
        return ejecutarConsulta($update_nicho);
    }

    public function listarpabellon()
    {
      $sql="SELECT *  FROM pabellon ";
      return ejecutarConsulta($sql);
    }

     public function mostrar($idpabellon)
    {
      $sql="SELECT * FROM pabellon where idpabellon='$idpabellon'";
      return ejecutarConsultaSimpleFila($sql);
    }

    public function mostrardetalle($iddetalle_pabellon)
    {
      $sql="SELECT * FROM detalle_pabellon  where iddetalle_pabellon='$iddetalle_pabellon'";
      return ejecutarConsultaSimpleFila($sql);
    }

     public function eliminar($idpabellon)
    {
      $sql="DELETE FROM pabellon where idpabellon='$idpabellon'";
      return ejecutarConsulta($sql);
    }

     public function eliminar_detalle($iddetalle_pabellon)
    {
      $sql="DELETE FROM detalle_pabellon where iddetalle_pabellon='$iddetalle_pabellon'";
      return ejecutarConsulta($sql);
    }

    public function listar_detalle()
    {
      $sql="SELECT d.iddetalle_pabellon,d.fila,d.columna,d.abc,d.precio_venta,d.estado_nicho,p.nombre as nombre_propietario,a.nombre as nombre_pabellon,t.nombre as nombre_difunto  
            FROM detalle_pabellon d 
            JOIN pabellon a ON d.idpabellon=a.idpabellon
            LEFT JOIN contrato c ON d.idcontrato=c.idcontrato
            LEFT JOIN persona p ON d.idpersona=p.idpersona
            LEFT JOIN difunto t ON d.iddifunto = t.iddifunto";
      return ejecutarConsulta($sql);
    }

    public function listarDetallePorPabellon($idpabellon) {
    $sql = "SELECT dp.fila, dp.columna, dp.abc, p.idpersona, p.nombre_nicho AS nombre_propietario,d.nombre as nombre_difunto, dp.estado_nicho
            FROM detalle_pabellon dp
            LEFT JOIN contrato c ON dp.idcontrato=c.idcontrato
            LEFT JOIN persona p ON dp.idpersona = p.idpersona
            LEFT JOIN difunto d ON dp.iddifunto=d.iddifunto
            WHERE dp.idpabellon = '$idpabellon'
            ORDER BY dp.fila, dp.columna";
    return ejecutarConsulta($sql);
    }
     public function selectPabellon()
    {
      $sql="SELECT * FROM  pabellon";
      return ejecutarConsulta($sql);
    }

    public function grafico_top(){
    // Paso 1: Ejecutar la consulta real
    $sql = "SELECT 
                MONTH(v.fecha_hora) AS mes,
                COUNT(d.iddetalle_pabellon) AS total_vendido
            FROM detalle_pabellon d
            JOIN contrato v ON d.idcontrato = v.idcontrato
            WHERE YEAR(v.fecha_hora) = YEAR(CURDATE())
            GROUP BY MONTH(v.fecha_hora)
            ORDER BY mes ASC";

    $res = ejecutarConsulta($sql);

    // Paso 2: Inicializar array con 12 meses (enero = 0, diciembre = 11)
    $ventas = array_fill(0, 12, 0);

    // Paso 3: Rellenar el array con los valores reales
    while ($row = $res->fetch_assoc()) {
        $mes = (int)$row['mes']; // 1 a 12
        $ventas[$mes - 1] = (int)$row['total_vendido'];
    }

    // Paso 4: Retornar como respuesta
    return [
        "datos" => $ventas
    ];
  }

      public function grafico_nicho(){
    // Paso 1: Ejecutar la consulta real
    $sql = "SELECT 
            CASE 
                WHEN estado_nicho = 1 THEN 'Disponibles'
                WHEN estado_nicho IN (2, 3, 4, 5) THEN 'Futuro'
                WHEN estado_nicho = 6 THEN 'Enterrados'
                ELSE 'Otro'
            END AS name,
            COUNT(*) AS y
            FROM detalle_pabellon WHERE idpabellon!='40'
            GROUP BY name";

    $result = ejecutarConsulta($sql);

    $data = [];
    while ($row = $result->fetch_assoc()) {
        $data[] = [
            "name" => $row["name"],
            "y" => (int)$row["y"]
        ];
    }
        return ["data" => $data];
  }


}