# 4Alarm - Sistema de Alarmas Comunitarias Multi-Tenant

## Descripción
Plataforma SaaS multi-tenant de alarmas comunitarias con integración Tuya IoT.
Cada tenant (cliente/comunidad) tiene sus propios dispositivos, usuarios y configuración Tuya.

## Arquitectura
- **Backend**: FastAPI + MongoDB (Motor async)
- **Frontend**: React + Shadcn/UI + TailwindCSS
- **IoT**: Tuya Cloud API por tenant
- **Push**: Web Push (VAPID) por tenant
- **Auth**: JWT con tenant_id embebido

## Multi-Tenant
- Cada tenant tiene su propio `tenant_id` en todas las colecciones
- Super-admin global gestiona tenants
- Admin de tenant gestiona solo sus usuarios y dispositivos
- Aislamiento completo de datos entre tenants

## Variables de Entorno (backend/.env)

```
MONGO_URL=mongodb://localhost:27017
DB_NAME=alarm4_db
JWT_SECRET=change-me-in-production
VAPID_PUBLIC_KEY=
VAPID_PRIVATE_KEY=
```

Cada tenant almacena sus credenciales Tuya en la colección `tenants`:
- `tuya_access_id`
- `tuya_access_secret`
- `tuya_endpoint`

## Colecciones MongoDB
- `tenants` — Configuración por tenant (Tuya creds, nombre, slug)
- `users` — Usuarios con `tenant_id`
- `devices` — Dispositivos registrados con `tenant_id`
- `assignments` — Asignaciones usuario↔dispositivo
- `device_states` — Estado ON/OFF cacheado
- `events` — Historial de acciones (toggle, SOS, test)
- `notifications` — Notificaciones in-app
- `push_subscriptions` — Suscripciones push
- `preferences` — Preferencias de sonido por usuario
- `chat_config`, `chat_rooms`, `chat_messages` — Chat temporal
- `app_config` — Config de la app por tenant (iconos, long-press)
- `registration_links` — Links de registro público
- `pending_registrations` — Registros pendientes de aprobación

## Setup

### Backend
```bash
cd backend
pip install -r requirements.txt
uvicorn server:app --host 0.0.0.0 --port 8001 --reload
```

### Frontend
```bash
cd frontend
yarn install
yarn start
```

## Estructura
```
4alarm-standalone/
├── backend/
│   ├── server.py          # FastAPI app + auth + DB
│   ├── routes/
│   │   ├── auth.py        # Login, registro, JWT
│   │   ├── tenants.py     # CRUD tenants (super-admin)
│   │   └── alarmas.py     # Core: dispositivos, toggle, SOS, push, chat
│   ├── services/
│   │   └── tuya.py        # Tuya API client per-tenant
│   ├── requirements.txt
│   └── .env
├── frontend/
│   ├── src/
│   │   ├── App.js
│   │   ├── context/       # AuthContext, TenantContext
│   │   ├── pages/         # Panel, Admin, Historial, etc.
│   │   ├── components/    # Layout, ChatFlotante
│   │   └── lib/           # API helpers
│   ├── package.json
│   └── .env
└── README.md
```
