# Office onboarding — alta de empleados

Cómo dar de alta a un nuevo usuario interno de la oficina (plan `office`,
acceso lifetime, sin billing). Sirve también para resetear password de un
empleado existente.

> Pre-requisitos: tener acceso SSH/cPanel al server donde corre Django y
> que el `.venv` esté activable.

## 1) Crear o actualizar al usuario

```bash
cd /home/altoque/maxeditor   # o el path donde está el deploy
source .venv/bin/activate
python backend/manage.py create_user --email juan.perez@altoque.tv --name "Juan Pérez"
```

Salida típica:

```
Usuario creado: juan.perez@altoque.tv  (plan=office/active, max_devices=2, staff=False)
Password generada: aB3xK!mZqRt2Vy  (guardala en un lugar seguro y compartila por canal cifrado)
```

Si querés definir vos la password (en lugar de generarla):

```bash
python backend/manage.py create_user --email juan@altoque.tv --password 'TempPass123!'
```

El comando es **idempotente**: si el email ya existe, actualiza la
contraseña, plan y `max_devices` sin crear un segundo usuario.

### Flags útiles

| Flag             | Default  | Para qué                                                               |
| ---------------- | -------- | ---------------------------------------------------------------------- |
| `--email`        | (req.)   | Email único del usuario. También se usa como `username`.               |
| `--password`     | auto     | Si no la pasás, se genera y se imprime al final.                       |
| `--name`         | `""`     | Nombre a mostrar en el editor.                                         |
| `--plan`         | `office` | `office` / `trial` / `pro_monthly` / `pro_yearly` / `lifetime`.        |
| `--status`       | `active` | `active` / `trialing` / `past_due` / `canceled` / `inactive`.          |
| `--max-devices`  | `2`      | Cuántos PCs puede tener registrados simultáneamente.                   |
| `--staff`        | off      | Habilita acceso a `/admin/` (Django Admin). NO da superuser.           |

## 2) Compartir credenciales con el empleado

Enviar por canal seguro (1Password, Bitwarden, etc.) **no por email plano**:

- URL del editor: `https://altoque.tv/maxeditor`
- Email: `juan.perez@altoque.tv`
- Password temporal: la generada arriba
- Link de descarga del companion: `https://altoque.tv/maxeditor/download`
- Nota: *"Cambiá la contraseña en el primer login desde Settings"*.

## 3) Onboarding del empleado

1. Descargar `MaxEditor_Setup_v0.X.X.exe` desde la página de descarga.
2. Instalar (no requiere admin; el cert HTTPS local se instala en
   `CurrentUser\Root` automáticamente).
3. Lanzar MaxEditor → ventana propia → login con email + password.
4. La PC queda registrada como dispositivo (cupo: `max_devices`).

## 4) Operaciones comunes

### Resetear password

```bash
python backend/manage.py create_user --email juan@altoque.tv --password 'NuevaTemp!'
```

(El comando reescribe el hash; el usuario queda con la nueva password al
próximo login.)

### Suspender un usuario

Desde Django Admin (`/admin/auth/user/`) marcar `is_active=False`, o:

```bash
python backend/manage.py shell -c "from django.contrib.auth import get_user_model; \
  U=get_user_model(); u=U.objects.get(email='juan@altoque.tv'); \
  u.is_active=False; u.save()"
```

### Liberar dispositivos (si llega al límite y necesita reinstalar)

```bash
python backend/manage.py shell -c "from apps.accounts.models import Device; \
  from django.contrib.auth import get_user_model; U=get_user_model(); \
  u=U.objects.get(email='juan@altoque.tv'); \
  Device.objects.filter(user=u).update(is_active=False); print('OK')"
```

El próximo login registrará la PC actual como dispositivo nuevo dentro del
cupo.

### Ver dispositivos activos de todos los usuarios

```bash
python backend/manage.py shell -c "from apps.accounts.models import Device; \
  [print(d.user.email, d.name, d.platform, d.last_seen_at) \
  for d in Device.objects.filter(is_active=True).select_related('user')]"
```

## 5) Crear un superuser/admin (opcional)

Para alguien que necesita acceso al Django Admin además del editor:

```bash
python backend/manage.py create_admin_user --email admin@altoque.tv --name "Admin"
```

(Usa el comando dedicado `create_admin_user`, no `create_user --staff`,
porque deja la cuenta como `lifetime` + superuser + reasigna proyectos
huérfanos.)

## 6) Troubleshooting

- **"Límite de N dispositivos alcanzado"** al hacer login → ver "Liberar
  dispositivos" arriba.
- **"Internal Server Error"** al login → verificar que Django esté
  corriendo y que el dominio del frontend esté en `CORS_ALLOWED_ORIGINS`
  / `CSRF_TRUSTED_ORIGINS`.
- **El companion no se conecta** → verificar que el `.exe` se haya
  registrado en `Inicio > MaxEditor` y que `https://127.0.0.1:7432/health`
  responda en el navegador del empleado.
