# Plan de Implementación: Carrito de Compras Configurable (Laravel + PostgreSQL)

Este plan detalla el desarrollo de un carrito de compras configurable y moderno, desarrollado en PHP utilizando el framework **Laravel 11**, con **PostgreSQL** como base de datos y **Vanilla CSS/JS** para un diseño moderno, dinámico y responsivo. En este caso de uso, el sector inicial configurado será una **peluquería** con productos de cabello natural, sintético y cuidado capilar.

## Características Clave
1. **Seguridad y Acceso**:
   - Registro y login seguro de usuarios.
   - Roles y Permisos: `Administrador` y `Cliente`.
   - Registro de Auditorías: Historial de acciones críticas (ej. cambios de configuración, creación de productos, compras, inicio de sesión) registrando la dirección IP del visitante.
2. **Módulo de Configuración de Marca (Sectorizable)**:
   - Configuración dinámica desde el panel de administración: Nombre del negocio, Logo (imagen), Redes sociales (Facebook, Instagram, WhatsApp, TikTok), y Paleta de Colores (Color Primario, Secundario, y Fondo/Tema).
   - Aplicación dinámica de estos estilos en la tienda pública (vía variables CSS inyectadas).
3. **Módulo de Productos**:
   - Gestión completa (CRUD) con carga de imágenes.
   - Precarga (seeder) de los productos de peluquería solicitados:
     - Cabello Natural 100% Humano 20 pulgadas
     - Extensiones Clip-In Lisas Negras
     - Cabello Sintético Rizado
     - Shampoo Profesional Keratina
     - Mascarilla Nutrición Profunda
     - Cabello Ondulado Premium 22 pulgadas
4. **Clientes & Carrito de Compras**:
   - Catálogo público responsivo y moderno (Aesthetic Premium, Glassmorphism, Micro-animaciones).
   - Carrito interactivo (añadir, remover, cambiar cantidades) persistente.
   - Checkout simulado que crea un pedido y registra la compra en la auditoría con la IP.
   - Gestión de Clientes desde el panel de administrador.

---

## Preguntas Abiertas / Decisiones de Diseño

> [!IMPORTANT]
> 1. **Uso de Vanilla CSS**: De acuerdo con las instrucciones de desarrollo, utilizaremos Vanilla CSS personalizado y estructurado para lograr un acabado moderno y premium sin Tailwind, controlando las variables de color directamente desde la base de datos. ¿Está de acuerdo con este enfoque?
> 2. **Autenticación**: Proponemos construir una interfaz de autenticación personalizada utilizando controladores nativos de Laravel en lugar de instalar Breeze con Tailwind, para mantener la fidelidad al Vanilla CSS y un diseño limpio y moderno. ¿Es correcto?
> 3. **Roles y Permisos**: Usaremos un sistema de roles simple implementado directamente en la base de datos (columna `role` en la tabla `users` con valores `'admin'` y `'customer'`) y un middleware de control de acceso para evitar dependencias innecesarias y maximizar la seguridad. ¿Prefiere esto o un paquete como Spatie Permission?

---

## Cambios Propuestos

El proyecto se creará en el subdirectorio `C:\Users\larry\.gemini\antigravity-ide\scratch\configurable-cart`. Se recomienda establecer esta carpeta como espacio de trabajo una vez aprobada e iniciada la instalación.

### 1. Base de Datos (Migraciones y Modelos)

#### [NEW] `database/migrations/xxxx_xx_xx_create_audit_logs_table.php`
- Registro de auditorías: `id`, `user_id` (nullable), `action` (string), `details` (text), `ip_address` (string), `created_at`.

#### [NEW] `database/migrations/xxxx_xx_xx_create_settings_table.php`
- Almacenamiento de la configuración global del negocio: `key` (string, unique), `value` (text).

#### [NEW] `database/migrations/xxxx_xx_xx_create_products_table.php`
- Tabla de productos: `id`, `name`, `description`, `price`, `stock`, `image_path` (string), `created_at`, `updated_at`.

#### [NEW] `database/migrations/xxxx_xx_xx_create_orders_table.php`
- Tabla de pedidos: `id`, `user_id` (cliente), `total_amount`, `status` (pending, completed, cancelled), `ip_address`, `created_at`.

#### [NEW] `database/migrations/xxxx_xx_xx_create_order_items_table.php`
- Detalle del pedido: `id`, `order_id`, `product_id`, `quantity`, `price`.

### 2. Controladores y Lógica de Negocio

#### [NEW] `app/Http/Middleware/AuditVisitorIp.php`
- Middleware global para registrar accesos o acciones sospechosas, u obtener la IP de manera centralizada.

#### [NEW] `app/Http/Controllers/AuthController.php`
- Manejo de inicio de sesión, registro y cierre de sesión de usuarios con redirecciones por rol.

#### [NEW] `app/Http/Controllers/ProductController.php`
- CRUD de productos (con carga de archivos a `storage/app/public/products`).

#### [NEW] `app/Http/Controllers/SettingController.php`
- Actualización de variables de negocio (nombre, logo, colores, redes sociales).

#### [NEW] `app/Http/Controllers/CartController.php`
- Operaciones del carrito de compras (almacenado en sesión para persistencia ágil).

#### [NEW] `app/Http/Controllers/OrderController.php`
- Procesamiento de checkout, guardado de pedidos y generación del log de auditoría.

#### [NEW] `app/Http/Controllers/AdminController.php`
- Dashboard administrativo que consolida métricas, lista de clientes y bitácora de auditoría.

### 3. Vistas y Estilos (Blade & Vanilla CSS)

#### [NEW] `resources/views/layouts/app.blade.php`
- Layout general público. Recupera dinámicamente las variables de color del modulo de configuración e inyecta propiedades CSS customizadas como:
  ```css
  :root {
      --primary-color: {{ $settings['primary_color'] ?? '#6366f1' }};
      --secondary-color: {{ $settings['secondary_color'] ?? '#a855f7' }};
      --background-theme: {{ $settings['theme_mode'] === 'dark' ? '#0f172a' : '#f8fafc' }};
      /* ... otros estilos custom ... */
  }
  ```

#### [NEW] `public/css/style.css`
- Estilos base modernos y premium. Implementará glassmorphism para modales, sombras suaves, y efectos de transición fluidos al pasar el cursor (hover) por las tarjetas de productos.

#### [NEW] `resources/views/shop/index.blade.php`
- Tienda pública: Catálogo de productos con filtros básicos, buscador y tarjetas interactivas de compra.

#### [NEW] `resources/views/shop/cart.blade.php`
- Detalle interactivo del carrito de compras con resumen de precios y botón de checkout.

#### [NEW] `resources/views/admin/dashboard.blade.php`
- Panel administrativo con accesos rápidos a productos, clientes, configuración y registros de auditoría.

#### [NEW] `resources/views/admin/audit_logs.blade.php`
- Visualización interactiva de la tabla de auditorías filtrable y ordenada cronológicamente.

#### [NEW] `resources/views/admin/settings.blade.php`
- Panel interactivo para editar el nombre de la tienda, subir el logo, actualizar colores (con selector visual HTML5 color picker) y añadir redes sociales.

---

## Plan de Verificación

### Pruebas Manuales
1. **Configuración de Marca**:
   - Cambiar el color primario a rosa (estilo peluquería premium) y guardar. Verificar que el botón "Añadir al carrito" y los títulos de la tienda pública cambien automáticamente de color.
   - Cambiar el nombre y logo, y comprobar su correcta actualización en el header público y en el panel de administrador.
2. **Flujo de Compra**:
   - Iniciar sesión como Cliente.
   - Navegar por el catálogo público de productos de peluquería pre-cargados.
   - Agregar "Cabello Natural 100% Humano 20 pulgadas" y "Shampoo Profesional Keratina" al carrito, actualizar sus cantidades, y procesar la compra.
   - Verificar la creación del pedido en el panel de administración.
3. **Auditoría e IP**:
   - Revisar la sección de logs de auditoría en el panel de administración y constatar que se registre cada inicio de sesión, creación de producto y compra con la dirección IP local (normalmente `127.0.0.1` o `::1` en local).
4. **Seguridad de Acceso**:
   - Intentar ingresar a `/admin/settings` con un usuario cliente y comprobar que el sistema bloquea el acceso con un código HTTP `403 Forbidden`.

### Pruebas Automatizadas
- Ejecución de migraciones limpias: `php artisan migrate:fresh --seed`.
- Pruebas automatizadas de autenticación e IP (opcional, en `tests/Feature/AuditLogTest.php`).
