# Installation et Déploiement - Taskio

## Prérequis

- PHP 8.0 ou supérieur
- MySQL 5.7 ou supérieur
- Serveur web (Apache/Nginx)
- Composer (optionnel pour futures dépendances)
- Accès Cron pour les tâches planifiées

## Installation

### 1. Cloner ou télécharger le projet

```bash
cd /Applications/MAMP/htdocs/
git clone <repository-url> Taskio
# ou télécharger et extraire l'archive
```

### 2. Configuration de la base de données

**Créer la base de données:**

```bash
mysql -u root -p
```

```sql
CREATE DATABASE taskio CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
EXIT;
```

**Importer le schéma:**

```bash
mysql -u root -p taskio < database/schema.sql
```

### 3. Configuration de l'application

**Modifier le fichier `/config/config.php`:**

```php
// Base de données
define('DB_HOST', 'localhost');
define('DB_NAME', 'taskio');
define('DB_USER', 'votre_utilisateur');
define('DB_PASS', 'votre_mot_de_passe');

// URLs
define('BASE_URL', 'http://localhost:8888/Taskio/public');
define('ASSETS_URL', BASE_URL . '/assets');

// Email (à configurer selon votre service)
define('SMTP_HOST', 'smtp.votre-service.com');
define('SMTP_PORT', 587);
define('SMTP_USER', 'votre@email.com');
define('SMTP_PASS', 'votre_mot_de_passe');
define('MAIL_FROM', 'noreply@taskio.com');
define('MAIL_FROM_NAME', 'Taskio');
```

### 4. Configuration du serveur web

**Apache (.htaccess déjà configuré)**

Assurez-vous que `mod_rewrite` est activé:

```bash
sudo a2enmod rewrite
sudo service apache2 restart
```

**Nginx**

```nginx
server {
    listen 80;
    server_name taskio.local;
    root /path/to/Taskio/public;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}
```

### 5. Permissions

```bash
chmod -R 755 /path/to/Taskio
chmod -R 777 /path/to/Taskio/storage # si vous créez un dossier storage
```

### 6. Configuration des icônes PWA

**Créer les icônes d'application:**

Générez des icônes aux dimensions suivantes et placez-les dans `/public/assets/icons/`:
- icon-72x72.png
- icon-96x96.png
- icon-128x128.png
- icon-144x144.png
- icon-152x152.png
- icon-192x192.png
- icon-384x384.png
- icon-512x512.png

Vous pouvez utiliser des outils en ligne comme:
- https://realfavicongenerator.net/
- https://www.pwabuilder.com/

### 7. Configuration des tâches Cron

**Ajouter au crontab:**

```bash
crontab -e
```

```cron
# Vérification des tâches à échéance - tous les jours à 8h00
0 8 * * * /usr/bin/php /path/to/Taskio/cron/check_due_tasks.php >> /path/to/Taskio/logs/cron.log 2>&1

# Nettoyage des anciennes notifications - tous les lundis à 2h00
0 2 * * 1 /usr/bin/php /path/to/Taskio/cron/cleanup_old_notifications.php >> /path/to/Taskio/logs/cron.log 2>&1
```

### 8. Comptes par défaut

**Après l'import du schéma, utilisez ces comptes de test:**

Admin:
- Email: admin@taskio.com
- Password: admin123

Partenaire:
- Email: partner@taskio.com
- Password: partner123

⚠️ **IMPORTANT:** Changez ces mots de passe en production!

## Configuration SSL (Production)

Pour activer HTTPS (requis pour les notifications push):

### Avec Let's Encrypt:

```bash
sudo apt install certbot python3-certbot-apache
sudo certbot --apache -d votre-domaine.com
```

### Mettre à jour config.php:

```php
define('BASE_URL', 'https://votre-domaine.com');
```

## Configuration des Notifications Push

### 1. Générer les clés VAPID:

```bash
# Installer web-push (Node.js requis)
npm install -g web-push

# Générer les clés
web-push generate-vapid-keys
```

### 2. Ajouter les clés dans config.php:

```php
define('VAPID_PUBLIC_KEY', 'votre_clé_publique');
define('VAPID_PRIVATE_KEY', 'votre_clé_privée');
define('VAPID_SUBJECT', 'mailto:votre@email.com');
```

## Tests

### Vérifier l'installation:

1. Accédez à `http://localhost:8888/Taskio/public`
2. Connectez-vous avec un compte test
3. Testez les fonctionnalités principales:
   - Création de projet
   - Création de tâche
   - Vue Kanban
   - Calendrier
   - Notifications

### Tester la PWA:

1. Ouvrez l'application dans Chrome/Edge
2. Ouvrez les DevTools (F12)
3. Onglet "Application" > "Manifest"
4. Vérifier que le manifest est valide
5. Onglet "Service Workers" > Vérifier l'enregistrement
6. Tester l'installation (icône dans la barre d'adresse)

### Tester le Cron:

```bash
php /path/to/Taskio/cron/check_due_tasks.php
```

## Sauvegarde

### Sauvegarder la base de données:

```bash
mysqldump -u root -p taskio > backup_$(date +%Y%m%d).sql
```

### Sauvegarder les fichiers:

```bash
tar -czf taskio_backup_$(date +%Y%m%d).tar.gz /path/to/Taskio
```

## Maintenance

### Vider le cache du navigateur:

En production, incrémenter la version du cache dans `sw.js`:

```javascript
const CACHE_NAME = 'taskio-v2'; // Augmenter le numéro
```

### Mise à jour:

1. Sauvegarder la base de données
2. Sauvegarder le dossier
3. Appliquer les modifications
4. Tester sur environnement de staging
5. Déployer en production

## Dépannage

### Erreur de connexion à la base de données:

- Vérifier les identifiants dans `config/config.php`
- Vérifier que MySQL est démarré
- Vérifier les permissions utilisateur

### Page blanche:

- Activer l'affichage des erreurs dans `config/config.php`
- Vérifier les logs Apache/Nginx
- Vérifier les permissions des fichiers

### Service Worker ne se charge pas:

- Vérifier que l'URL du site commence par HTTPS (ou localhost)
- Vider le cache du navigateur
- Vérifier dans DevTools > Application > Service Workers

### Les icônes ne s'affichent pas:

- Vérifier la connexion CDN (Lucide)
- Ouvrir la console du navigateur pour voir les erreurs
- Exécuter `lucide.createIcons()` manuellement

## Support

Pour toute question ou problème:
- Consulter la documentation
- Vérifier les logs: `/logs/cron.log`, logs Apache/Nginx
- Activer le mode debug dans `config.php`

## Sécurité

En production:
- ✅ Changer tous les mots de passe par défaut
- ✅ Utiliser HTTPS
- ✅ Définir `ERROR_REPORTING` à `false`
- ✅ Restreindre l'accès au dossier `/cron`
- ✅ Configurer un firewall
- ✅ Mettre à jour régulièrement PHP et MySQL
- ✅ Faire des sauvegardes régulières
- ✅ Utiliser des mots de passe forts
- ✅ Limiter les tentatives de connexion
