# Gemini Project Guidelines

Este archivo contiene las directrices y el contexto para el trabajo en este proyecto.

---

## 📝 **CONFIGURACIÓN ESPECÍFICA DEL PROYECTO**

**¡IMPORTANTE!** Esta sección debe ser editada al iniciar un nuevo proyecto a partir de esta plantilla.

### 1. Propósito del Proyecto

- **Propósito:** Este repositorio es una plantilla base (`template`) para iniciar nuevos proyectos con laravel 12 y el stack tall para crear diferentes tipos de proyectos como web-site, catalogo de productos, e-commerce, inmobiliaria, registro para eventos, catalogo de empresas (tarjetas digitales).

### 2. Guía de Estilos Específica

- **Colores:**
  - **Textos Destacados:** Para títulos (h1, h2, etc.) y otros textos que necesiten ser resaltados, utilizar el color `#006500`. En Tailwind CSS, esto se puede aplicar usando clases de color personalizadas o con la clase `text-[#006500]`.

### 3. Patrones de Desarrollo Específicos

---

## 📚 **DIRECTRICES GENERALES (NO EDITAR)**

Esta sección contiene las reglas y convenciones que aplican a todos los proyectos.

### 1. Instrucciones Operativas para Gemini

- **LEER ANTES DE ESCRIBIR:** Es una regla **crítica**. Siempre debo leer el contenido de un archivo inmediatamente antes de proponer cualquier modificación. Esto es para asegurar que estoy trabajando sobre la versión más actualizada del código.
- **CONSULTAR DOCUMENTACIÓN:** Antes de preguntar sobre el funcionamiento de componentes, helpers o utilidades, debo consultar el archivo `DOCUMENTATION.md`.
- **CONSULTAR LARAVEL.md:** Para directrices específicas sobre el uso de laravel-boost, debo consultar el archivo `LARAVEL.md`.

### 2. Contexto General del Proyecto

- **Framework Principal:** Laravel 12.
- **Stack:** TALL (Tailwind CSS 4, Alpine.js, Livewire, Laravel).
- **Testing:** Se utiliza PhpUnit para las pruebas.
- **Estructura:** El proyecto utiliza una arquitectura modular.
  - **Módulos Reutilizables:** Ubicados en el directorio `modules/`.
  - **Módulo Principal/Específico:** Ubicado en el directorio `app/`.

### 3. Reglas de Creación de Código

- **Idioma:**
  - **Código:** Todos los nombres de variables, funciones, clases, etc., deben estar en **inglés**.
    - **Vistas y Maquetación:** Todo el texto visible para el usuario final debe estar en **español**.
- **Migraciones:**
  - Toda nueva tabla debe incluir `softDeletes()`.
- **Modelos:**
  - Todo nuevo modelo debe usar el trait `Illuminate\Database\Eloquent\SoftDeletes`.
  - Cada modelo debe utilizar los traits `HasAttributes`, `HasRelations` y `HasScopes` en un subdirectorio `NombreDelModelo/Concerns/`.
- **Módulos:**
  - Usar `php artisan make:...` y mover el archivo al módulo correspondiente, ajustando el `namespace`.
- **Filament Resources:**
  - Deben manejar `softDeletes`.
  - Deben ser `Translatable`.
  - Las acciones de tabla deben agruparse en un `ActionGroup` y su position debe ser `BeforeCells`.

### 4. Creación de un Nuevo Módulo

Esta guía detalla el proceso paso a paso para crear un nuevo módulo desde cero, asegurando que se integre correctamente con la arquitectura modular y las convenciones del proyecto.

1. **Creación de la Estructura de Directorios Principal:**

- Crear el directorio raíz del módulo en `modules/Vendor/ModuleName` (ej. `modules/Catalog/Quotes`).

2. **Migración:**

- Crear la migración usando `php artisan make:migration create_module_table`.
- Crear el directorio `modules/Vendor/ModuleName/database/migrations`.
- **Mover** el archivo de migración generado desde `database/migrations` al nuevo directorio del módulo.
- Modificar la migración para añadir las columnas necesarias, incluyendo siempre `$table->softDeletes();`.

3. **Modelo:**

- Crear el directorio para el modelo y sus `Concerns`: `modules/Vendor/ModuleName/Models/ModelName/Concerns`.
- Crear el archivo del modelo `ModelName.php` en `modules/Vendor/ModuleName/Models/`.
- El modelo debe usar los traits `SoftDeletes`, y los `Concerns` locales (`HasAttributes`, `HasRelations`, `HasScopes`).
- Crear los tres traits (`HasAttributes.php`, `HasRelations.php`, `HasScopes.php`) dentro del directorio `Concerns`.

4. **Configuración de Filament:**

- Crear el directorio `modules/Vendor/ModuleName/Config`.
- Dentro, crear el archivo `filament-modules.php`.
- Este archivo debe devolver un array con la clave `resources` que contiene una lista de las clases de `Resource` de Filament que el módulo proveerá. Ejemplo:

```php
<?php
return [
    'resources' => [
        Modules\Vendor\ModuleName\Filament\Resources\ModelNameResource::class,
    ],
];
```

5. **Política de Acceso (Policy):**

- Crear el directorio `modules/Vendor/ModuleName/Policies`.
- Crear el archivo `ModelNamePolicy.php`.
- La política debe usar `Modules\Core\Admins\Models\Admin` como el modelo de usuario para la autorización.
- Definir los métodos de la política (`viewAny`, `create`, `update`, etc.) usando permisos específicos del módulo (ej. `$user->can('view_any_model_name')`).

6. **Proveedor de Servicios (Service Provider):**

- Crear el directorio `modules/Vendor/ModuleName/Providers`.
- Crear el archivo `ModuleNameServiceProvider.php`.
- El proveedor **debe** usar el trait `Modules\Core\Utilities\Concerns\MergeMultiArray`.
- En el método `boot()`:
- Registrar la política del modelo con `Gate::policy(ModelName::class, ModelNamePolicy::class);`.
- Cargar las migraciones con `$this->loadMigrationsFrom(__DIR__ . '/../database/migrations');`.
- En el método `register()`:
- Fusionar la configuración de Filament con `$this->mergeConfigFrom(__DIR__ . '/../Config/filament-modules.php', 'filament-modules');`.

7. **Registro del Módulo:**

- Añadir el nuevo proveedor de servicios al archivo `config/modules.php` para que la aplicación lo cargue.

### 6. Guía de Estilos General

- **Importaciones:**
  - Agrupar importaciones del mismo `namespace` usando llaves `{}`.
