Parqueo Público Cachorros 1 — Versión PHP/MySQL para cPanel

======================================================
1. ESTRUCTURA DE ARCHIVOS
======================================================

Suba esta carpeta dentro de:

public_html/cachorros1/

Debe quedar así:

public_html/
└── cachorros1/
    ├── index.html
    ├── app.js
    ├── styles.css
    ├── README.txt
    └── api/
        ├── config.php
        ├── db.php
        ├── helpers.php
        ├── users.php
        ├── auth/
        │   ├── login.php
        │   ├── logout.php
        │   └── me.php
        ├── state/
        │   ├── get.php
        │   └── save.php
        └── setup/
            └── install.sql

Luego acceda a:

https://www.piedraypiedra.com/cachorros1/

======================================================
2. CREAR BASE DE DATOS EN CPANEL
======================================================

1. Ingrese a cPanel.
2. Busque: MySQL® Databases.
3. Cree una base de datos, por ejemplo:

   usuariohosting_cachorros1

4. Cree un usuario MySQL, por ejemplo:

   usuariohosting_parqueo

5. Asigne una contraseña segura.
6. Agregue el usuario a la base de datos.
7. Marque ALL PRIVILEGES / Todos los privilegios.
8. Guarde los cambios.

======================================================
3. IMPORTAR TABLAS MYSQL
======================================================

1. En cPanel abra phpMyAdmin.
2. Seleccione la base de datos creada.
3. Presione Importar.
4. Seleccione el archivo:

   api/setup/install.sql

5. Presione Continuar.

Esto creará:
- users
- app_state
- audit_logs

Usuario inicial:
- Usuario: admin
- Clave: 123456

Cambie esa clave al terminar la instalación.

======================================================
4. COLOCAR CREDENCIALES MYSQL
======================================================

Abra este archivo:

api/config.php

Edite estas líneas:

define('DB_HOST', 'localhost');
define('DB_NAME', 'TU_BASE_DE_DATOS');
define('DB_USER', 'TU_USUARIO_MYSQL');
define('DB_PASS', 'TU_PASSWORD_MYSQL');

Ejemplo:

define('DB_HOST', 'localhost');
define('DB_NAME', 'piedra_cachorros1');
define('DB_USER', 'piedra_parqueo');
define('DB_PASS', 'ClaveSeguraAqui');

Guarde el archivo.

======================================================
5. AUTENTICACIÓN
======================================================

Esta versión usa:
- PHP session
- Cookie HttpOnly
- Login por API REST
- MySQL para usuarios

Ya no depende de localStorage para autenticación.

======================================================
6. ALMACENAMIENTO
======================================================

El sistema guarda el estado principal en MySQL dentro de la tabla:

app_state

Incluye:
- movimientos
- tarifas
- mensualidades
- enlace RTSP

======================================================
7. API REST
======================================================

Endpoints:

POST api/auth/login.php
POST api/auth/logout.php
GET  api/auth/me.php
GET  api/state/get.php
POST api/state/save.php
GET  api/users.php
POST api/users.php

======================================================
8. RECOMENDACIONES DE SEGURIDAD
======================================================

- Cambiar clave inicial admin.
- Usar HTTPS.
- No compartir api/config.php.
- No borrar api/setup/install.sql hasta finalizar instalación.
- Luego puede mover install.sql fuera de public_html.

======================================================
9. NOTAS
======================================================

Esta versión mantiene:
- index.html
- app.js
- styles.css

Pero cambia persistencia local por:
- PHP
- MySQL
- REST API
- Cookie de sesión


Actualización tickets:
- Encabezado grande: CACHORROS 1.
- Dirección: Cartago, Frente al Ministerio de Salud.
- Teléfono: 88888888.
- Correo: gerencia@piedraypiedra.com.
- Leyenda de objetos personales valiosos.
- Eliminada leyenda Ticket POS Térmico.
- Consecutivo de entrada: ING-000001.
- Consecutivo de salida: SAL-000001.
- Consecutivo de cierre: CIE-000001.
- Serie única de seguridad para cada ingreso: CCH1-YYYYMMDD-XXXXXX.


Corrección producción:
- El ticket de salida se reconstruye antes de llamar a imprimir.
- El consecutivo de salida ya aparece en el comprobante final.
- Los contadores de consecutivos se guardan en MySQL dentro de app_state.ticketCounters.
- Se evita que cierre de turno o salida repitan consecutivos por usar localStorage.
- api/state/save.php ahora acepta ticketCounters.


Corrección definitiva impresión y consecutivos:
- Consecutivos se generan en MySQL con api/tickets/next.php.
- Nueva tabla: ticket_counters.
- Importar api/setup/ticket_counters.sql en phpMyAdmin.
- Entrada, salida y cierre usan consecutivo atómico del servidor.
- Impresión usa iframe dedicado con HTML aislado para evitar página en blanco.


SERVER_COUNTER_ONLY_V2: consecutivos exclusivamente desde MySQL. Verificar en consola: CACHORROS1_APP_VERSION=SERVER_COUNTER_ONLY_V2


Corrección usuarios y sesión:
- Al crear usuario, la lista se refresca desde MySQL.
- Al entrar a la pestaña Usuarios, consulta api/users.php.
- Al refrescar el navegador, valida sesión con api/auth/me.php y no manda al login si la cookie sigue activa.
- Versión app.js: USERS_SESSION_FIX_V1.


USERS_DIRECT_RENDER_V2:
- La lista de usuarios se consulta directamente desde MySQL cada vez que se abre la pestaña Usuarios.
- Al crear usuario, vuelve a consultar api/users.php y refresca la tabla.
- Si no carga, muestra el error exacto en pantalla.


USERS_VISUAL_FINAL:
- La tabla de usuarios se pinta directamente desde ./api/users.php.
- No depende de localStorage ni de variables internas.
- Al abrir la pestaña Usuarios, al crear usuario y cada 5 segundos mientras esté visible, refresca desde MySQL.
- En consola debe verse: CACHORROS1_APP_VERSION=USERS_VISUAL_FINAL.
