"""
test_gesture.py — Tests del mòdul gesture.py (sensor PAJ7620U2).
Executa des del directori Rasp/:  python tests/test_gesture.py

Descomenta la funció que vols provar al final del fitxer.
Assegura't que el venv està activat i pigpiod en marxa (sudo pigpiod -s 1).
"""

import sys
import os
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))

import time
from gesture import (
    gesture_setup, gesture_cleanup,
    read_gesture,
    GS_NONE, GS_FORWARD, GS_LEFT, GS_RIGHT,
    GS_UP, GS_DOWN, GS_CLOCKWISE, GS_ANTICLOCKWISE, GS_WAVE,
)

_GESTURE_NAMES = {
    GS_NONE:          "Cap (GS_NONE)",
    GS_FORWARD:       "Endavant (GS_FORWARD)",
    GS_LEFT:          "Esquerra (GS_LEFT)",
    GS_RIGHT:         "Dreta (GS_RIGHT)",
    GS_UP:            "Amunt (GS_UP)",
    GS_DOWN:          "Avall (GS_DOWN)",
    GS_CLOCKWISE:     "Horari (GS_CLOCKWISE)",
    GS_ANTICLOCKWISE: "Antihorari (GS_ANTICLOCKWISE)",
    GS_WAVE:          "Wave (GS_WAVE)",
}


# ==================
# TEST 1 — Connexió i inicialització
# ==================

def test_connection():
    """
    Comprova que el sensor PAJ7620U2 és accessible via I2C.
    Ha de mostrar 'Gesture sensor init OK' sense errors.
    """
    print("=== TEST CONNEXIÓ PAJ7620U2 ===")

    gesture_setup()
    time.sleep(0.5)

    gesture_cleanup()
    print("Test connexió completat.\n")


# ==================
# TEST 2 — Lectura de gestos
# ==================

def test_read_gestures():
    """
    Llegeix gestos durant 30 segons i els mostra per pantalla.
    Fes gestos davant del sensor per verificar que els detecta correctament:
      - Mà cap endavant/enrere  → GS_FORWARD
      - Mà cap a l'esquerra     → GS_LEFT
      - Mà cap a la dreta       → GS_RIGHT
      - Mà cap amunt            → GS_UP
      - Mà cap avall            → GS_DOWN
      - Rotació horària         → GS_CLOCKWISE
      - Rotació antihorària     → GS_ANTICLOCKWISE
      - Sacsejada (wave)        → GS_WAVE
    """
    print("=== TEST LECTURA GESTOS PAJ7620U2 ===")
    print("Fes gestos davant del sensor durant 30 segons...")

    gesture_setup()
    time.sleep(0.5)

    inici = time.time()
    while time.time() - inici < 30:
        gest = read_gesture()
        if gest != GS_NONE:
            nom = _GESTURE_NAMES.get(gest, f"Desconegut ({gest})")
            print(f"  Gest detectat: {nom}")
        time.sleep(0.05)

    gesture_cleanup()
    print("Test lectura gestos completat.\n")


# ==================
# Execució
# ==================

if __name__ == "__main__":
    # Descomenta el test que vols executar:
    test_connection()
    # test_read_gestures()
