# Optimized Python Code
# Archivo: Genset.py
# Ruta: src\App\Ventas_Module\VentasEUA\DataMaster\Genset.py
# Lenguaje: Python con Flask

from flask import Flask, render_template, send_file, abort, url_for, jsonify,  request,session
import os
from dotenv import load_dotenv
import ftplib
from werkzeug.utils import secure_filename
import tempfile
from App.Subir_Archivo import subir_archivo_ftp_desde_request,view_pdf_file,verificar_actualizar_archivos
from Consultas_SQL.Ventas.VentasEUA.DataMaster.GensetSQL import (
    get_GensetCost, 
    update_GensetCost,  
    update_Genset_TechnicalSheet,
    item_exists, 
)
from App.Security_Module.UserPassword import user_has_access
import requests
import os

# Cargar las variables de entorno desde el archivo .env
load_dotenv()
# /////////////////////////////////
#   Variables Generales
# ////////////////////////////////
ruta_pdf = "/domains/sycelephant.com/public_html/file/Ventas/EUA/DMITEMS/GENSET"
carpeta = "/Ventas/EUA/DMITEMS/GENSET/"
# /////////////////////////////////
#   Funciones Genericas
# ////////////////////////////////


# /////////////////////////////////
#   Varifica items Repetidos
# ////////////////////////////////
def existen_items(item):
    result = item_exists(item)
    if result:  # Verifica si result no es None (puede ser None si la consulta no encuentra nada)
        count = int(result[0]) # Accede al primer elemento de la tupla (índice 0) y lo convierte a entero.
    else:
        count = 0
    return count

# /////////////////////////////////
#   Funciones dedicadas
# ////////////////////////////////
def register_PlantaElectrica(app):
    """
    Registra todas las rutas relacionadas con el manejo de plantas electricas
    en la aplicación Flask.
    """
    # /////////////////////////////////
    #   Consultar Breakers
    # //////////////////////////////// 
    @app.route("/ventas/data_master/Genset/listGensetCost", methods=["GET"])
    def listGensetCost():
        """
        user_id = session.get('user_id')
        if not user_has_access(user_id, "Ventas", "read"):
            message = "No tiene permisos para visualizar"
            return render_template("Security/AccessDened.html",message)
        """
        """Retorna la lista de opciones de breaker."""
        try:
            departament = get_GensetCost()
            return jsonify(departament), 200
        except Exception as e:
            return jsonify({"error": str(e)}), 500
    # Función para verificar si un item ya existe en la base de datos
    

    # /////////////////////////////////
    #   Actualizar inputs de  Breakers
    # ////////////////////////////////
    @app.route("/ventas/data_master/Genset/updateGensetCost", methods=["POST"])
    def update_Genset_route():
        """Actualiza un genset en la base de datos."""
        try:
            data = request.get_json()
            item = data.get("item")
            configID = data.get("configID")
            controllerBrandID = data.get("controllerBrandID")
            Cost = data.get("Cost")
            evaluator = data.get("evaluator")

            if not all([item, configID, controllerBrandID, Cost, evaluator]):
                return jsonify({"error": "Todos los campos son obligatorios."}), 400
                

            update_GensetCost(item, configID, controllerBrandID, Cost, evaluator)
            return jsonify({"message": "Catálogo de componentes adicionales de plantas eléctricas actualizado exitosamente."}), 200
        except Exception as e:
            return jsonify({"error": str(e)}), 500
        
    # /////////////////////////////////
    #   Revisar la tabla CZE_GensetCost y verificar si estan en archivos de fichas tecnicas  
    # ////////////////////////////////       
    @app.route("/ventas/data_master/Genset/actualizarGensetCost", methods=["GET"])
    def updated_Genset_route():
        """Actualiza todas las Fichas técnicas verificando su existencia en el servidor."""
        
        #print("Iniciando actualización de fichas técnicas para GensetCost")

        try:
            # Configuramos la ruta al módulo y el nombre de la función
            module_path = "Consultas_SQL.Ventas.VentasEUA.DataMaster.GensetSQL"
            function_name = "searchitems"

            resultado = verificar_actualizar_archivos(
                tabla="CZE_GensetCost",
                campo_id="CostID",
                campo_url="TechnicalSheet",
                update_function=update_Genset_TechnicalSheet,
                ruta_remota=ruta_pdf,
                module_path=module_path,             # Pasamos la ruta al módulo
                search_function_name=function_name,  # Pasamos el nombre de la función
                base_url="https://file.sycelephant.com",
                carpeta = carpeta
            )
            
            print(f"Resultado de la actualización: {resultado}")
            
            if resultado["exito"]:
                return jsonify({"message": resultado["mensaje"]}), 200
            else:
                print(f"Error en actualización: {resultado['mensaje']}")
                return jsonify({"error": resultado["mensaje"]}), 500
                
        except Exception as e:
            import traceback
            print(f"Error en la actualización: {str(e)}")
            print(traceback.format_exc())
            return jsonify({"error": str(e)}), 500