#!/usr/bin/make

SHELL = /bin/sh

USER_UID := $(shell id -u)
USER_UNAME := $(shell id -un)
USER_GID := $(shell id -g)
USER_GNAME := $(shell id -gn)
DATE_NOW := $(shell date '+%Y-%m-%d_%H%M%S')

export USER_UID
export USER_UNAME
export USER_GID
export USER_GNAME
# export DATE_NOW


pull:
		docker-compose pull

build:
		docker-compose build --build-arg USER_UID=$(USER_UID) --build-arg USER_UNAME=$(USER_UNAME) --build-arg USER_GID=$(USER_GID) --build-arg USER_GNAME=$(USER_GNAME)

buildnc:
		docker-compose build --no-cache --build-arg USER_UID=$(USER_UID) --build-arg USER_UNAME=$(USER_UNAME) --build-arg USER_GID=$(USER_GID) --build-arg USER_GNAME=$(USER_GNAME)

buildnc_mysql:
		docker-compose build --no-cache --build-arg USER_UID=$(USER_UID) --build-arg USER_UNAME=$(USER_UNAME) --build-arg USER_GID=$(USER_GID) --build-arg USER_GNAME=$(USER_GNAME) mysql

buildnc_nginx:
		docker-compose build --no-cache --build-arg USER_UID=$(USER_UID) --build-arg USER_UNAME=$(USER_UNAME) --build-arg USER_GID=$(USER_GID) --build-arg USER_GNAME=$(USER_GNAME) nginx

downbuildup: down build up

up:
		docker-compose up -d

ps:
		docker-compose ps

logs:
		docker-compose logs -f

maj_config: crd composer_install updb cim cr pag #dev.phpmyadmin.leshed.fr

crd:
		docker exec leshed-php-1 /bin/bash -c "drush cache-clear drush"

composer_install:
		docker exec leshed-php-1 /bin/bash -c "composer install --no-dev"

updb:
		docker exec leshed-php-1 /bin/bash -c "drush updb -y"

cim:
		docker exec leshed-php-1 /bin/bash -c "drush config-import -y"

# sync_struct:
# 		docker exec leshed-php-1 /bin/bash -c "drush im --choice safe && drush ib --choice full"

cr:
		docker exec leshed-php-1 /bin/bash -c "drush cr"

pag:
		docker exec leshed-php-1 /bin/bash -c "drush pag all canonical_entities:node && drush pag all canonical_entities:taxonomy_term"

restart_nginx:
		docker-compose restart nginx

restart_php:
		docker-compose restart php

down:
		docker-compose down

exec_nginx:
		docker exec -it leshed-nginx-1 bash

exec_php:
		docker exec -it leshed-php-1 bash

exec_mysql:
		docker exec -it leshed-mysql-1 bash

dump_db:
	docker exec leshed-mysql-1 sh -c 'exec mariadb-dump -uroot -pleshed leshed' > ./ressources/leshed-$(DATE_NOW)-local.sql

# --- Mobile : associer puis inspecter ----------------------------------------
# Le port de débogage sans fil change à chaque activation : le relire sur
# l'écran du téléphone avant chaque commande.
#
# 1. Association (une seule fois ; ou si la connexion refuse ensuite) :
#    téléphone : « Débogage sans fil » > « Associer l'appareil avec un code
#    d'appairage », noter le port affiché, puis :
#      make mobile_associate ADDR=192.168.1.101:PORT
#    et saisir le code à 6 chiffres demandé par adb.
#
# 2. Inspection : relier l'adresse de la ligne « Adresse IP et port » :
#      make mobile_inspect ADDR=192.168.1.101:PORT
#    Ça connecte l'appareil et pose deux tunnels :
#      - reverse 5173 : le localhost:5173 du téléphone (assets Vite en dev,
#        librairie leshed/vitehmr) pointe vers le laptop. Sans lui : page
#        sans styles ni JS, aucune erreur visible.
#      - forward 9223 : socket de débogage Firefox du téléphone exposé en
#        local (inspecteur : about:debugging). Pas 9222 : réservé au
#        --remote-debugging-port du Firefox desktop (WebDriver BiDi).
#    Après connexion : recharger la page sur le téléphone.
#
# Piège connu : tout changement de transport (câble, reboot, réactivation du
# sans fil) tue les tunnels en silence — les requêtes restent en attente,
# plus rien ne charge. Relancer mobile_inspect, recharger la page.

mobile_associate:
	@case "$(ADDR)" in *:*) ;; *) echo "Usage : make mobile_associate ADDR=IP:PORT"; exit 1;; esac; \
	adb pair "$(ADDR)"

mobile_inspect:
	@case "$(ADDR)" in *:*) ;; *) echo "Usage : make mobile_inspect ADDR=IP:PORT"; exit 1;; esac; \
	adb connect "$(ADDR)" || exit 1; \
	adb reverse --remove tcp:5173 2>/dev/null; \
	adb forward --remove tcp:9223 2>/dev/null; \
	adb -s "$(ADDR)" reverse tcp:5173 tcp:5173 && \
	adb -s "$(ADDR)" forward tcp:9223 localabstract:org.mozilla.firefox/firefox-debugger-socket && \
	echo "OK : tunnels posés ($(ADDR)). Recharger la page sur le téléphone."

# --- Mobile USB : associer puis inspecter ------------------------------------
# Plus simple que le sans fil : pas de code, pas de port à lire.
# L'« association » USB est l'autorisation donnée sur le téléphone à la
# première connexion (popup empreinte de l'ordinateur).
#
# 1. [Téléphone] Brancher le câble, activer « Débogage USB » dans les Options
#    pour développeurs. À la première connexion, une popup demande
#    d'autoriser l'ordinateur : cocher « Toujours autoriser depuis cet
#    ordinateur », valider.
# 2. [Ordinateur] make mobile_associate_usb — vérifie que l'appareil est vu
#    et autorisé. Si « unauthorized », revalider la popup sur le téléphone.
# 3. [Ordinateur] make mobile_inspect_usb — pose les mêmes tunnels que
#    mobile_inspect (reverse 5173, forward 9223) sur l'appareil USB.
#    Ensuite : recharger la page sur le téléphone, puis étapes 6 à 8 de la
#    procédure sans fil du README (inspection about:debugging, HMR).

mobile_associate_usb:
	@state=$$(adb devices | awk 'NR>1 && $$1 !~ /:/ && NF {print $$2; exit}'); \
	case "$$state" in \
		device) echo "OK : appareil USB vu et autorisé.";; \
		unauthorized) echo "Non autorisé : valider la popup sur le téléphone."; exit 1;; \
		*) echo "Aucun appareil USB (câble branché ? « Débogage USB » actif ?)."; exit 1;; \
	esac

mobile_inspect_usb:
	@serial=$$(adb devices | awk 'NR>1 && $$2=="device" && $$1 !~ /:/ {print $$1; exit}'); \
	[ -n "$$serial" ] || { echo "Aucun appareil USB vu — lancer d'abord make mobile_associate_usb."; exit 1; }; \
	adb reverse --remove tcp:5173 2>/dev/null; \
	adb forward --remove tcp:9223 2>/dev/null; \
	adb -s "$$serial" reverse tcp:5173 tcp:5173 && \
	adb -s "$$serial" forward tcp:9223 localabstract:org.mozilla.firefox/firefox-debugger-socket && \
	echo "OK : tunnels posés ($$serial, USB). Recharger la page sur le téléphone."
