# Phone Refurb - Gestion de stock de téléphones

Outil de gestion pour le reconditionnement de téléphones contre l'obsolescence programmée.

## Installation

```bash
cd ~/phone-refurb
python3 -m venv venv
./venv/bin/pip install flask
```

## Lancer la Web App

```bash
# Manuel
./venv/bin/python web-app.py

# Via systemd (recommandé)
sudo cp phone-refurb.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable phone-refurb
sudo systemctl start phone-refurb
```

## Accès

- **LAN:** http://192.168.1.149:5050
- **Mesh KAWA:** http://100.64.0.4:5050

## CLI - phone-cli

### Commandes principales

```bash
# Lister les téléphones
./phone-cli list [status]

# Ajouter un téléphone
./phone-cli add <brand> <model> <model_code> [imei] [serial] [status] [notes]

# Détails d'un téléphone
./phone-cli info <phone_id>

# Ajouter une action
./phone-cli action <phone_id> <action_type> [status] [notes]

# Changer le statut
./phone-cli status <phone_id> <status>

# Lister les ROMs
./phone-cli roms [device_code]

# Rechercher
./phone-cli search <query>
```

### Exemples

```bash
# Ajouter un Galaxy S7
./phone-cli add Samsung "Galaxy S7" SM-G930F

# Ajouter avec IMEI et notes
./phone-cli add Samsung "Galaxy J5" SM-J510FN 352154091234567 51c1e4fc stock "Écran fêlé"

# Lister les téléphones en stock
./phone-cli list stock

# Voir les détails du téléphone #1
./phone-cli info 1

# Enregistrer une action
./phone-cli action 1 flash_rom success "LineageOS 18.1 installée"

# Enregistrer un échec
./phone-cli action 1 unlock_bootloader failed "Bootloader bloqué par opérateur"

# Marquer comme prêt
./phone-cli status 1 ready

# Marquer comme vendu
./phone-cli status 1 sold

# Voir les ROMs pour j5xnlte
./phone-cli roms j5xnlte

# Rechercher
./phone-cli search samsung
./phone-cli search j5
```

## Statuts

| Statut | Description |
|--------|-------------|
| stock | En stock, pas encore traité |
| wip | En cours de traitement |
| paused | Traitement suspendu |
| ready | Prêt à être utilisé/vendu |
| sold | Vendu |

## Types d'actions

| Action | Description |
|--------|-------------|
| backup | Sauvegarde des données |
| unlock_bootloader | Déverrouillage du bootloader |
| flash_recovery | Flash du recovery (TWRP, etc.) |
| flash_rom | Installation d'une ROM |
| root | Root du téléphone |
| test | Tests fonctionnels |
| repair | Réparation matérielle |
| sell | Vente |
| other | Autre action |

## Base de données

SQLite: `phones.db`

### Tables

- **phones** — Téléphones (marque, modèle, IMEI, statut)
- **phone_specs** — Caractéristiques (CPU, RAM, stockage)
- **software_state** — État logiciel (OS, kernel, root)
- **roms** — ROMs disponibles
- **actions** — Historique des actions

### Requêtes utiles

```sql
-- Voir tous les téléphones avec leur OS
SELECT * FROM phone_summary;

-- Téléphones rootés
SELECT * FROM phone_summary WHERE root = 1;

-- Téléphones par marque
SELECT brand, COUNT(*) FROM phones GROUP BY brand;

-- Actions récentes
SELECT p.brand, p.model, a.action_type, a.action_date, a.status 
FROM actions a JOIN phones p ON a.phone_id = p.id 
ORDER BY a.action_date DESC LIMIT 20;

-- Taux de succès
SELECT status, COUNT(*) as count FROM actions GROUP BY status;
```

## Structure des fichiers

```
~/phone-refurb/
├── phones.db          # Base SQLite
├── web-app.py         # Web app Flask
├── phone-cli          # CLI
├── venv/              # Environnement Python
├── web-app.log        # Logs
└── README.md          # Cette doc
```

## Intégration KAWA

La web app est accessible depuis n'importe quel nœud du mesh via:
- `http://kawaAgent1:5050` (si DNS mesh configuré)
- `http://100.64.0.4:5050` (IP mesh)

---

*Dernière mise à jour: 2026-04-12*