#!/usr/bin/env bash
# ============================================================
#  TPE Odoo POS — Installation interactive (Mac/Linux)
#  Lancer : curl -sL https://wiki.delgard.cloud/tpe/install.sh | bash
# ============================================================
set -e

SCRIPT_URL="https://wiki.delgard.cloud/tpe"
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

echo ""
echo "============================================"
echo "  TPE Odoo POS — Installation"
echo "============================================"
echo ""

# ── Parse args ──
INTERACTIVE=true
while [[ $# -gt 0 ]]; do
    case "$1" in
        --dir) BASE_DIR="$2"; INTERACTIVE=false; shift 2 ;;
        --tpe-ip) TPE_IP="$2"; INTERACTIVE=false; shift 2 ;;
        --port) BRIDGE_PORT="$2"; INTERACTIVE=false; shift 2 ;;
        *) shift ;;
    esac
done

BASE_DIR="${BASE_DIR:-$HOME/BridgeTPE}"
TPE_IP="${TPE_IP:-192.168.1.169}"
BRIDGE_PORT="${BRIDGE_PORT:-9876}"

# ── Mode interactif (si aucun argument fourni) ──
if $INTERACTIVE; then
    echo ""
    echo "============================================"
    echo "  TPE Odoo POS — Installation"
    echo "============================================"
    echo ""
    echo "Où installer les bridges ?"
    echo "  Défaut : $HOME/BridgeTPE"
    read -p "  Dossier [$HOME/BridgeTPE] : " BASE_DIR_IN < /dev/tty
    BASE_DIR="${BASE_DIR_IN:-$HOME/BridgeTPE}"
    read -p "  IP du TPE [192.168.1.169] : " TPE_IP_IN < /dev/tty
    TPE_IP="${TPE_IP_IN:-192.168.1.169}"
    read -p "  Port HTTP du bridge [9876] : " BRIDGE_PORT_IN < /dev/tty
    BRIDGE_PORT="${BRIDGE_PORT_IN:-9876}"
else
    echo ""
    echo "============================================"
    echo "  TPE Odoo POS — Installation"
    echo "============================================"
    echo "  Mode automatique (options de l'extension)"
    echo "============================================"
fi

INSTALL_DIR="$BASE_DIR/tpe-concert/bridges"

echo ""
echo -e "${GREEN}→ Installation dans : $INSTALL_DIR${NC}"
echo ""

# ── Télécharger les fichiers ──
mkdir -p "$INSTALL_DIR"
echo "Téléchargement des bridges..."
curl -sL "$SCRIPT_URL/bridge_server.py" -o "$INSTALL_DIR/bridge_server.py"
curl -sL "$SCRIPT_URL/bridge_v3.py" -o "$INSTALL_DIR/bridge_v3.py"
curl -sL "$SCRIPT_URL/mock-bridge.py" -o "$INSTALL_DIR/mock-bridge.py"
chmod +x "$INSTALL_DIR"/*.py
echo -e "${GREEN}[OK] Fichiers téléchargés${NC}"

# ── Créer le lanceur ──
cat > "$INSTALL_DIR/start_bridge.sh" << LAUNCHER
#!/usr/bin/env bash
cd "$INSTALL_DIR"
echo "Bridge TPE → $TPE_IP:$BRIDGE_PORT"
python3 bridge_server.py --tpe-ip "$TPE_IP" --listen "$BRIDGE_PORT"
LAUNCHER
chmod +x "$INSTALL_DIR/start_bridge.sh"

cat > "$INSTALL_DIR/start_mock.sh" << MOCK
#!/usr/bin/env bash
echo "Mock bridge sur port 9877"
cd "$INSTALL_DIR"
python3 mock-bridge.py --port 9877
MOCK
chmod +x "$INSTALL_DIR/start_mock.sh"

# ── Désinstallateur ──
cat > "$BASE_DIR/uninstall.sh" << UNINSTALL
#!/usr/bin/env bash
echo "Désinstallation du bridge TPE..."
systemctl --user stop tpe-bridge 2>/dev/null || true
systemctl --user disable tpe-bridge 2>/dev/null || true
launchctl bootout gui/\$(id -u)/com.hermes.tpe-bridge 2>/dev/null || true
rm -f "\$HOME/Library/LaunchAgents/com.hermes.tpe-bridge.plist" 2>/dev/null || true
rm -rf "$BASE_DIR"
echo -e "${GREEN}[OK] Bridge TPE désinstallé${NC}"
UNINSTALL
chmod +x "$BASE_DIR/uninstall.sh"

# ── Démarrage automatique ──
if [[ "$(uname)" == "Darwin" ]]; then
    # macOS — launchd
    PLIST="$HOME/Library/LaunchAgents/com.hermes.tpe-bridge.plist"
    cat > "$PLIST" << PLISTXML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key><string>com.hermes.tpe-bridge</string>
    <key>ProgramArguments</key>
    <array><string>$INSTALL_DIR/start_bridge.sh</string></array>
    <key>RunAtLoad</key><true/>
    <key>KeepAlive</key><true/>
    <key>StandardOutPath</key><string>$INSTALL_DIR/bridge.log</string>
    <key>StandardErrorPath</key><string>$INSTALL_DIR/bridge.log</string>
</dict>
</plist>
PLISTXML
    launchctl bootout gui/$(id -u) "$PLIST" 2>/dev/null || true
    launchctl bootstrap gui/$(id -u) "$PLIST" 2>/dev/null || true
    echo -e "${GREEN}[OK] Démarrage automatique activé (launchd)${NC}"

elif [[ "$(uname)" == "Linux" ]]; then
    mkdir -p "$HOME/.config/systemd/user"
    cat > "$HOME/.config/systemd/user/tpe-bridge.service" << SYSTEMD
[Unit]
Description=Bridge TPE Odoo POS
After=network.target

[Service]
Type=simple
ExecStart=$INSTALL_DIR/start_bridge.sh
Restart=always
RestartSec=10
StandardOutput=append:$INSTALL_DIR/bridge.log
StandardError=append:$INSTALL_DIR/bridge.log

[Install]
WantedBy=default.target
SYSTEMD
    systemctl --user daemon-reload
    systemctl --user enable --now tpe-bridge
    echo -e "${GREEN}[OK] Démarrage automatique activé (systemd)${NC}"
fi

echo ""
echo "============================================"
echo -e "  ${GREEN}Installation terminée !${NC}"
echo "============================================"
echo "  Bridge réel : $INSTALL_DIR/start_bridge.sh"
echo "  Mock (test)  : $INSTALL_DIR/start_mock.sh"
echo "  Désinstaller : $BASE_DIR/uninstall.sh"
echo ""
echo "  Le bridge se lance automatiquement au démarrage."
echo ""
echo "  Lancement immédiat du bridge réel..."
echo "============================================"

# Lancer le bridge tout de suite
nohup "$INSTALL_DIR/start_bridge.sh" > "$INSTALL_DIR/bridge.log" 2>&1 &
sleep 2
if curl -s http://localhost:$BRIDGE_PORT/health > /dev/null 2>&1; then
    echo -e "${GREEN}[OK] Bridge lancé et joignable sur http://localhost:$BRIDGE_PORT${NC}"
else
    echo -e "${YELLOW}[!] Bridge lancé mais pas encore joignable — vérifie avec : curl http://localhost:$BRIDGE_PORT/health${NC}"
fi
