# Guide d'installation - ComptaAI Maroc

Ce guide explique comment installer ComptaAI Maroc sur XAMPP, cPanel ou un VPS PHP 8+ sans dependances terminal obligatoires.

## Prerequis serveur

- PHP 8.0 ou plus.
- MySQL 5.7+ ou MariaDB compatible.
- Extensions PHP: `pdo_mysql`, `mbstring`, `fileinfo`, `json`, `openssl`, `session`, `filter`.
- Apache avec `.htaccess` active si le projet n'est pas pointe directement vers `public/`.
- Dossiers en ecriture: `storage/logs`, `storage/sessions`, `storage/tmp`, `uploads/documents`, `uploads/bank_statements`, `exports`.

## Installation XAMPP

1. Copier le dossier du projet dans:

```text
C:\xampp\htdocs\experio
```

2. Demarrer Apache et MySQL depuis le panneau XAMPP.
3. Ouvrir phpMyAdmin:

```text
http://localhost/phpmyadmin
```

4. Creer une base vide, par exemple:

```text
comptaai_maroc
```

5. Ouvrir l'assistant:

```text
http://localhost/experio/install/
```

6. Renseigner:

- URL publique: `http://localhost/experio/public`
- Base path: `/experio/public`
- Host DB: `127.0.0.1`
- Port: `3306`
- Database: `comptaai_maroc`
- Username: `root`
- Password: vide par defaut sur XAMPP

7. Cliquer sur `Tester la connexion`, puis `Installer ComptaAI Maroc`.
8. Creer le premier Super Admin depuis le formulaire.
9. Ouvrir:

```text
http://localhost/experio/public/login.php
```

## Installation cPanel

1. Creer une base MySQL et un utilisateur MySQL dans cPanel.
2. Donner tous les privileges a cet utilisateur sur la base.
3. Uploader les fichiers du projet sur l'hebergement.
4. Si possible, pointer le document root du domaine ou sous-domaine vers le dossier `public/`.
5. Si ce n'est pas possible, garder le `.htaccess` racine fourni. Il bloque l'acces direct a `app/`, `config/`, `database/`, `includes/`, `storage/` et `uploads/`.
6. Ouvrir l'assistant:

```text
https://votre-domaine.ma/install/
```

Si le domaine pointe directement vers `public/`, utiliser:

```text
https://votre-domaine.ma/install/
```

7. Renseigner les informations MySQL cPanel.
8. Utiliser `APP_BASE_PATH=/public` si le projet est expose avec le dossier `public` dans l'URL. Si le document root pointe deja vers `public/`, utiliser `APP_BASE_PATH=/`.
9. Installer et creer le premier Super Admin.
10. Apres installation, supprimer le dossier `/install/` ou garder:

```env
INSTALL_UNLOCK=false
```

## Configuration .env

Le fichier `.env` est genere par l'assistant. Exemple production:

```env
APP_NAME="ComptaAI Maroc"
APP_URL=https://votre-domaine.ma
APP_BASE_PATH=/
APP_ENV=production
APP_DEBUG=false

DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=cpaneluser_comptaai
DB_USERNAME=cpaneluser_comptaai
DB_PASSWORD="mot-de-passe-fort"

INSTALL_UNLOCK=false
```

Pour le developpement local, vous pouvez creer `.env.local`. Il surcharge `.env` sans etre versionne.

## Base de donnees

L'assistant importe automatiquement `schema.sql`. Si vous preferez phpMyAdmin:

1. Ouvrir la base.
2. Onglet SQL ou Import.
3. Importer `schema.sql`.
4. Creer ensuite un Super Admin via l'assistant ou via le script CLI si SSH est disponible.

## Permissions dossiers

Ces dossiers doivent etre accessibles en ecriture par PHP:

```text
storage/logs
storage/sessions
storage/tmp
uploads/documents
uploads/bank_statements
exports
```

Sur cPanel, utiliser le gestionnaire de fichiers pour verifier les permissions. En general `755` pour les dossiers suffit.

## Cron URL

Les cron sont proteges par token. Le token est stocke dans la table `system_settings`, cle:

```text
cron.secret_token
```

URLs typiques:

```text
https://votre-domaine.ma/cron/run_all.php?token=VOTRE_TOKEN
https://votre-domaine.ma/cron/send_emails.php?token=VOTRE_TOKEN
```

Sur cPanel, creer une tache cron qui appelle l'URL avec `curl` ou `wget` si disponible. Sinon lancer les jobs manuellement depuis `Automatisations`.

## Erreurs et logs

- En production, garder `APP_DEBUG=false`.
- Les erreurs PHP sont loggees dans:

```text
storage/logs/php-YYYY-MM-DD.log
```

- Les pages d'erreur publiques sont dans `public/errors/`.

## Checklist finale

- Connexion Super Admin OK.
- Upload document OK.
- Dossier `uploads/` non accessible directement.
- `APP_DEBUG=false` en production.
- SMTP laisse en mode test tant qu'il n'est pas configure.
- Cron token garde prive.
