import pyautogui
import time
from PIL import Image
import json
import os

# Nombre del archivo donde se guardarán las coordenadas
COORDS_FILE = "coordenadas.json"

# Función para capturar la región de la pantalla
def capturar_region(x, y, width, height, nombre_archivo):
    # Validar que el ancho y alto sean mayores que 0
    if width <= 0 or height <= 0:
        raise ValueError("La región de captura tiene dimensiones inválidas. Asegúrate de que el ancho y alto sean mayores que 0.")
    
    # Captura la región de la pantalla
    screenshot = pyautogui.screenshot(region=(x, y, width, height))
    # Guarda la imagen como JPG
    screenshot.save(nombre_archivo)

# Función para guardar las coordenadas en un archivo JSON
def guardar_coordenadas(coords):
    with open(COORDS_FILE, 'w') as f:
        json.dump(coords, f)
    print("Coordenadas guardadas en", COORDS_FILE)

# Función para cargar las coordenadas desde un archivo JSON
def cargar_coordenadas():
    if os.path.exists(COORDS_FILE):
        with open(COORDS_FILE, 'r') as f:
            return json.load(f)
    return None

# Función para capturar las coordenadas manualmente
def capturar_coordenadas():
    while True:
        input("Presiona Enter cuando estés listo para hacer clic en la esquina superior izquierda de la región...")
        print("Haz clic en la esquina superior izquierda de la región que deseas capturar...")
        time.sleep(2)  # Espera 2 segundos para que el usuario tenga tiempo de hacer clic
        x1, y1 = pyautogui.position()  # Captura la posición del primer clic

        input("Presiona Enter cuando estés listo para hacer clic en la esquina inferior derecha de la región...")
        print("Haz clic en la esquina inferior derecha de la región que deseas capturar...")
        time.sleep(2)  # Espera 2 segundos para que el usuario tenga tiempo de hacer clic
        x2, y2 = pyautogui.position()  # Captura la posición del segundo clic

        # Calcula el ancho y alto de la región
        width = x2 - x1
        height = y2 - y1

        # Validar que el ancho y alto sean mayores que 0
        if width <= 0 or height <= 0:
            print("Error: La región de captura tiene dimensiones inválidas. Inténtalo de nuevo.")
            continue

        input("Presiona Enter cuando estés listo para hacer clic en el primer lugar donde deseas hacer clic automáticamente...")
        print("Haz clic en el primer lugar donde deseas hacer clic automáticamente...")
        time.sleep(2)  # Espera 2 segundos para que el usuario tenga tiempo de hacer clic
        click_x1, click_y1 = pyautogui.position()

        # Guarda las coordenadas
        coords = {
            "region": {"x1": x1, "y1": y1, "width": width, "height": height},
            "click1": {"x": click_x1, "y": click_y1}
        }

        guardar_coordenadas(coords)
        return coords

# Función principal
def main():
    # Pregunta al usuario si quiere capturar nuevas coordenadas o usar las antiguas
    respuesta = input("¿Deseas capturar nuevas coordenadas? (s/n): ").strip().lower()
    
    if respuesta == 's':
        coords = capturar_coordenadas()
    else:
        coords = cargar_coordenadas()
        if not coords:
            print("No se encontraron coordenadas previas. Capturando nuevas coordenadas...")
            coords = capturar_coordenadas()

    # Extraer las coordenadas
    x1 = coords["region"]["x1"]
    y1 = coords["region"]["y1"]
    width = coords["region"]["width"]
    height = coords["region"]["height"]

    click_x1 = coords["click1"]["x"]
    click_y1 = coords["click1"]["y"]

    # Número de iteraciones
    iteraciones = 200

    for i in range(iteraciones):
        # Si es la primera iteración, espera 3 segundos antes de capturar
        if i == 0:
            print("Esperando 3 segundos antes de la primera captura...")
            time.sleep(3)

        # Captura la región de la pantalla
        nombre_archivo = f"captura_{i+1}.jpg"
        try:
            capturar_region(x1, y1, width, height, nombre_archivo)
            print(f"Captura {i+1} guardada como {nombre_archivo}")
        except ValueError as e:
            print(e)
            break

        # Hacer clic en el primer lugar
        pyautogui.click(click_x1, click_y1)
        print(f"Clic en el primer lugar ({click_x1}, {click_y1})")

        # Esperar 4 segundos antes de la siguiente iteración
        time.sleep(7)

if __name__ == "__main__":
    main()