#!/usr/bin/env bash
# setup.local.sh — Reset complet de la base locale + seed + migrations + données démo
# Usage : bash setup.local.sh
set -euo pipefail

# ─── Prérequis ────────────────────────────────────────────────────────────────
if [ ! -f "config/config.local.php" ]; then
    echo "ERREUR : config/config.local.php introuvable." >&2
    echo "Crée ce fichier avec tes credentials DB locaux." >&2
    exit 1
fi

if [ ! -f "vendor/bin/phinx" ]; then
    echo "ERREUR : vendor/bin/phinx introuvable — lance 'composer install' d'abord." >&2
    exit 1
fi

# ─── Extraction des credentials depuis config.local.php ──────────────────────
DB_HOST=$(php -r "require 'config/config.local.php'; echo DB_HOST;")
DB_PORT=$(php -r "require 'config/config.local.php'; echo DB_PORT;")
DB_NAME=$(php -r "require 'config/config.local.php'; echo DB_NAME;")
DB_USER=$(php -r "require 'config/config.local.php'; echo DB_USER;")
DB_PASS=$(php -r "require 'config/config.local.php'; echo DB_PASSWORD;")

MYSQL_ARGS=(-h "$DB_HOST" -P "$DB_PORT" --protocol=TCP -u "$DB_USER" "-p${DB_PASS}")

echo "=================================================="
echo " Reset DB locale : ${DB_NAME}@${DB_HOST}:${DB_PORT}"
echo "=================================================="

# ─── 1. Générer db/seed.sql si absent ────────────────────────────────────────
if [ ! -f "db/seed.sql" ]; then
    if [ ! -f "dump.sql" ]; then
        echo "ERREUR : dump.sql introuvable à la racine du projet." >&2
        exit 1
    fi
    echo ""
    echo "==> [1/4] Génération de db/seed.sql depuis dump.sql"
    php infra/make-seed.php
else
    echo ""
    echo "==> [1/4] db/seed.sql existant (ok)"
fi

# ─── 2. Drop + recreate DB ───────────────────────────────────────────────────
echo ""
echo "==> [2/4] Reset de la base '${DB_NAME}'"
mysql "${MYSQL_ARGS[@]}" <<SQL
DROP DATABASE IF EXISTS \`${DB_NAME}\`;
CREATE DATABASE \`${DB_NAME}\`
    CHARACTER SET utf8mb4
    COLLATE utf8mb4_unicode_ci;
SQL

# ─── 3. Import seed.sql ──────────────────────────────────────────────────────
# Patch de compatibilité MariaDB : la clé fonctionnelle uk_appcfg utilise
# (COALESCE(...)) qui est MySQL 8 — MariaDB n'accepte pas le mélange
# d'expressions et de colonnes normales dans un même UNIQUE KEY.
# On remplace par une clé classique (comportement NULL légèrement différent,
# sans conséquence en dev local).
echo ""
echo "==> [3/4] Import db/seed.sql"
sed 's/ADD UNIQUE KEY `uk_appcfg` ((COALESCE(`property_id`,0)),(COALESCE(`unit_id`,0)),`name`)/ADD UNIQUE KEY `uk_appcfg` (`property_id`,`unit_id`,`name`)/' \
    db/seed.sql \
    | mysql "${MYSQL_ARGS[@]}" "$DB_NAME"

# ─── 4. Migrations Phinx ─────────────────────────────────────────────────────
echo ""
echo "==> [4/4] Migrations + seeder démo"
php vendor/bin/phinx migrate -e local -c phinx.php
php vendor/bin/phinx seed:run -e local -c phinx.php

# ─── Résumé ──────────────────────────────────────────────────────────────────
echo ""
echo "=================================================="
echo " Setup local terminé"
echo "=================================================="

UNIT_COUNT=$(mysql "${MYSQL_ARGS[@]}" "$DB_NAME" -sN -e "SELECT COUNT(*) FROM unit;" 2>/dev/null || echo "?")
BOOKING_COUNT=$(mysql "${MYSQL_ARGS[@]}" "$DB_NAME" -sN -e "SELECT COUNT(*) FROM booking;" 2>/dev/null || echo "?")
USER_COUNT=$(mysql "${MYSQL_ARGS[@]}" "$DB_NAME" -sN -e "SELECT COUNT(*) FROM user;" 2>/dev/null || echo "?")

echo "  Unités     : ${UNIT_COUNT}"
echo "  Réservations: ${BOOKING_COUNT}"
echo "  Utilisateurs: ${USER_COUNT}"
echo ""
echo "  Compte démo : demo@gites-yourte.fr / demo123"
echo "  Serveur     : bash serve.sh  →  http://localhost:8000"
echo "=================================================="
