# API REST para Aplicaciones Móviles

Esta API REST proporciona todos los endpoints necesarios para desarrollar aplicaciones móviles que se conecten a tu sistema de gestión empresarial.

## 🔐 Autenticación

La API utiliza tokens JWT (JSON Web Tokens) para autenticación. 

### Login
```http
POST /api/auth/login.php
Content-Type: application/json

{
    "email": "usuario@ejemplo.com",
    "password": "contraseña"
}
```

### Respuesta del Login
```json
{
    "success": true,
    "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
    "user": {
        "id": 1,
        "nombre": "Juan Pérez",
        "email": "juan@ejemplo.com",
        "rol": "vendedor",
        "vendedor_id": 5
    },
    "expires_in": 7200
}
```

### Usar el Token
Incluye el token en el header Authorization de todas las peticiones:
```http
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...
```

## 📊 Endpoints Disponibles

### Dashboard
- `GET /api/dashboard/stats.php` - Estadísticas del dashboard

### Clientes
- `GET /api/clientes/index.php` - Listar clientes (con paginación y búsqueda)
- `GET /api/clientes/index.php?id=1` - Obtener cliente específico
- `POST /api/clientes/index.php` - Crear nuevo cliente
- `PUT /api/clientes/index.php` - Actualizar cliente
- `DELETE /api/clientes/index.php` - Eliminar cliente

### Cotizaciones
- `GET /api/cotizaciones/index.php` - Listar cotizaciones
- `GET /api/cotizaciones/index.php?id=1` - Obtener cotización específica
- `POST /api/cotizaciones/index.php` - Crear nueva cotización
- `PUT /api/cotizaciones/index.php` - Actualizar cotización

### Pedidos
- `GET /api/pedidos/index.php` - Listar pedidos
- `GET /api/pedidos/index.php?id=1` - Obtener pedido específico
- `POST /api/pedidos/index.php` - Crear nuevo pedido
- `PUT /api/pedidos/index.php` - Actualizar pedido

### Tickets
- `GET /api/tickets/index.php` - Listar tickets
- `GET /api/tickets/index.php?id=1` - Obtener ticket específico
- `POST /api/tickets/index.php` - Crear nuevo ticket
- `PUT /api/tickets/index.php` - Actualizar ticket

## 🔍 Parámetros de Consulta

### Paginación
- `page` - Número de página (por defecto: 1)
- `limit` - Elementos por página (por defecto: 20, máximo: 100)

### Búsqueda
- `search` - Texto de búsqueda
- `cliente_id` - Filtrar por cliente
- `vendedor_id` - Filtrar por vendedor
- `estado` - Filtrar por estado

### Ejemplo
```http
GET /api/cotizaciones/index.php?page=2&limit=10&search=COT-001&estado=pendiente
```

## 📱 Funcionalidades Móviles

### Para Vendedores
- Dashboard con métricas personales
- Gestión de clientes asignados
- Crear y gestionar cotizaciones
- Ver y actualizar pedidos
- Crear tickets de soporte

### Para Administradores
- Dashboard completo del sistema
- Gestión completa de clientes
- Supervisión de todas las cotizaciones
- Gestión de pedidos y tickets
- Reportes y estadísticas

## 🚀 Próximos Pasos para Desarrollo Móvil

### React Native (Recomendado)
1. **Instalación**
   ```bash
   npx react-native init MiAppEmpresarial
   cd MiAppEmpresarial
   npm install @react-native-async-storage/async-storage
   npm install react-navigation
   npm install axios
   ```

2. **Estructura Sugerida**
   ```
   src/
   ├── services/
   │   ├── api.js          # Configuración de Axios
   │   ├── auth.js         # Servicios de autenticación
   │   └── cliente.js      # Servicios de clientes
   ├── screens/
   │   ├── LoginScreen.js
   │   ├── DashboardScreen.js
   │   ├── ClientesScreen.js
   │   └── CotizacionesScreen.js
   ├── components/
   │   ├── Header.js
   │   ├── ClienteCard.js
   │   └── CotizacionCard.js
   └── utils/
       ├── storage.js      # AsyncStorage helpers
       └── constants.js    # URLs y constantes
   ```

3. **Configuración de API**
   ```javascript
   // src/services/api.js
   import axios from 'axios';
   import AsyncStorage from '@react-native-async-storage/async-storage';

   const API_BASE_URL = 'https://tu-dominio.com/app/api';

   const api = axios.create({
     baseURL: API_BASE_URL,
     headers: {
       'Content-Type': 'application/json',
     },
   });

   // Interceptor para agregar token automáticamente
   api.interceptors.request.use(async (config) => {
     const token = await AsyncStorage.getItem('token');
     if (token) {
       config.headers.Authorization = `Bearer ${token}`;
     }
     return config;
   });

   export default api;
   ```

### Flutter (Alternativa)
Si prefieres Flutter, la estructura sería similar pero usando Dart.

## 🔧 Configuración del Servidor

### Requisitos
- PHP 7.4 o superior
- MySQL 5.7 o superior
- Composer para dependencias
- Librería firebase/php-jwt

### Instalación
```bash
composer install
```

### Headers CORS
Los endpoints ya incluyen headers CORS para desarrollo. Para producción, ajusta los dominios permitidos.

## 🛡️ Seguridad

- Tokens JWT con expiración de 2 horas
- Validación de permisos por rol
- Sanitización de entradas
- Prepared statements para prevenir SQL injection
- Rate limiting recomendado para producción

## 📝 Ejemplos de Uso

### Crear Cotización
```javascript
const nuevaCotizacion = {
  cliente_id: 1,
  items: [
    {
      descripcion: "Producto A",
      cantidad: 2,
      precio_unitario: 100.00,
      precio_total: 200.00
    }
  ],
  subtotal: 200.00,
  iva: 32.00,
  total: 232.00,
  observaciones: "Entrega urgente"
};

const response = await api.post('/cotizaciones/index.php', nuevaCotizacion);
```

### Obtener Dashboard
```javascript
const stats = await api.get('/dashboard/stats.php');
console.log(stats.data.stats);
```

¡Ahora tienes una API completa lista para desarrollo móvil! 🎉
