from machine import I2C, Pin
from lcd_api import LcdApi
from pico_i2c_lcd import I2cLcd  # Asume que i2c_lcd es parte de tu biblioteca lcd_api
from keypad_utp import KeyPad
from time import sleep

# Configuración inicial de I2C y LCD
i2c = I2C(scl=Pin(22), sda=Pin(21))
LCD_I2C_ADDR = 0x27
LCD_COLUMNS = 16
LCD_ROWS = 2

v=Pin(15,Pin.OUT)
r=Pin(2,Pin.OUT)

g1=0
g2=0
g3=0
g4=0

f=1
c=0
e=0

lcd = I2cLcd(i2c, LCD_I2C_ADDR, LCD_ROWS, LCD_COLUMNS)

Teclas = [
    '1', '2', '3', 'A',
    '4', '5', '6', 'B',
    '7', '8', '9', 'C',
    '*', '0', '#', 'D',
]

keypad = KeyPad(r1=19, r2=18, r3=5, r4=4, c1=13, c2=12, c3=14, c4=27, keys=Teclas)
keypad.start()

# Mensaje inicial en la pantalla LCD
lcd.putstr("Introduce Pin: ")
#v.value(1)

last_key = None  # Variable para almacenar la última tecla presionada

try:
    while True:
         key = keypad.get_key()
         if key and key != last_key:# Si hay una nueva tecla presionada
            c+=1
            lcd.move_to(c, f)  # Mueve el cursor a donde comenzará el mensaje de la tecla
           # lcd.putstr("    ")  # Limpia la posición de la tecla anterior
            #lcd.move_to(1, 1)  # Vuelve a mover el cursor al inicio de la posición de la tecla
            lcd.putstr("*")  # Muestra la nueva tecla presionada
            last_key = key  # Actualiza la última tecla presionada
            
            if c<5:
             if key=="1" or g1==1:
                g1=1
                if key=="2" or g2==1:
                 g2=1
                 if key=="3" or g3==1:
                  g3=1
                  if key=="4" or g4==1:
                    g4=1
            
            if c>=3:
                c=3
            if key=="*":
                lcd.clear()  # Limpia la posición de la tecla anterior
                lcd.putstr("Introduce Pin: ")
                v.value(0)
                r.value(0)
                c=0
                g1=0
                g2=0
                g3=0
                g4=0
            
            if key=="#":
              if g1==1 and g2==1 and g3==1 and g4==1:
                lcd.move_to(1, 1)  # Mueve el cursor a donde comenzará el mensaje de la tecla
                lcd.putstr("          ")  # Limpia la posición de la tecla anterior
                lcd.move_to(1, 1)  # Vuelve a mover el cursor al inicio de la posición de la tecla
                lcd.putstr("Clave Correcta")  # Muestra la nueva tecla presionada
                v.value(1)
                
                
              if g1!=1 or g2!=1 or g3!=1 or g4!=1:
                #lcd.move_to(1, 1)  # Mueve el cursor a donde comenzará el mensaje de la tecla
                lcd.clear()
                #lcd.putstr("          ")  # Limpia la posición de la tecla anterior
                lcd.move_to(0, 1)  # Vuelve a mover el cursor al inicio de la posición de la tecla
                lcd.putstr("Clave incorrecta")  # Muestra la nueva tecla presionada
                sleep(2)
                lcd.clear()
                lcd.putstr("Introduce Pin: ")
                e+=1
                c=0
                g1=0
                g2=0
                g3=0
                g4=0
                
              if e==4:
                #lcd.move_to(1, 1)  # Mueve el cursor a donde comenzará el mensaje de la tecla
                lcd.clear()
                #lcd.putstr("                 ")  # Limpia la posición de la tecla anterior
                lcd.move_to(5, 1)  # Vuelve a mover el cursor al inicio de la posición de la tecla
                lcd.putstr("Bloqueado ")  # Muestra la nueva tecla presionada
                r.value(1)
                sleep(20)
                lcd.clear()
                lcd.putstr("Introduce Pin: ")
                r.value(0)
                c=0
                g1=0
                g2=0
                g3=0
                g4=0
            
                
            print(key)
            print(c)
            print(g1)
            print(g2)
            print(g3)
            print(g4)
         sleep(0.1)
         
finally:
    keypad.stop()