from flask import Flask, render_template, jsonify
import os
import ping3
import mysql.connector
from mysql.connector import Error
from config import Config

app = Flask(__name__, 
            template_folder='../templates',
            static_folder='../static')
            
app.config.from_object(Config)

def get_db_connection():
    try:
        return mysql.connector.connect(
            host=Config.DB_HOST,
            user=Config.DB_USER,
            password=Config.DB_PASS,
            database=Config.DB_NAME
        )
    except Error as e:
        print(f"Error conectando a MySQL: {e}")
        return None

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/api/mikrotiks')
def get_mikrotiks():
    print("Intentando obtener MikroTiks...")  # Debug
    conn = get_db_connection()
    if conn:
        try:
            cursor = conn.cursor(dictionary=True)
            query = """
                SELECT 
                    id_microtik as id, 
                    microtik as name,
                    ip_microtik
                FROM microtiks 
                ORDER BY microtik
            """
            print(f"Ejecutando query: {query}")  # Debug
            cursor.execute(query)
            mikrotiks = cursor.fetchall()
            print(f"MikroTiks encontrados: {mikrotiks}")  # Debug
            return jsonify(mikrotiks)
        except Exception as e:
            print(f"Error al obtener MikroTiks: {str(e)}")  # Debug
            return jsonify({"error": str(e)}), 500
        finally:
            conn.close()
    else:
        print("No se pudo conectar a la base de datos")  # Debug
        return jsonify({"error": "Error de conexión a la base de datos"}), 500

@app.route('/api/equipos/<int:mikrotik_id>')
def get_equipos(mikrotik_id):
    conn = get_db_connection()
    if conn:
        try:
            cursor = conn.cursor(dictionary=True)
            cursor.execute("""
                SELECT e.id_equipo, e.equipo, e.ip, e.direccion,
                       g.grupo, s.subgrupo
                FROM equipos_prtg e
                LEFT JOIN grupos_prtg g ON e.id_grupo = g.id_grupo
                LEFT JOIN subgrupos_prtg s ON e.id_subgrupo = s.id_subgrupo
                WHERE g.id_mikrotik = %s AND e.activo = 1
                ORDER BY e.equipo
            """, (mikrotik_id,))
            equipos = cursor.fetchall()
            print("Equipos encontrados:", equipos)  # Debug
            return jsonify(equipos)
        except Exception as e:
            print("Error al obtener equipos:", str(e))  # Debug
            return jsonify({"error": str(e)}), 500
        finally:
            conn.close()
    return jsonify([])

@app.route('/api/ping/<path:ip>')
def check_host(ip):
    try:
        response_time = ping3.ping(ip, timeout=2)
        if response_time is not None:
            return jsonify({
                'status': 'success',
                'ip': ip,
                'alive': True,
                'response_time': round(response_time * 1000, 2)  # ms
            })
        else:
            return jsonify({
                'status': 'warning',
                'ip': ip,
                'alive': False,
                'message': 'Host no responde'
            })
    except Exception as e:
        return jsonify({
            'status': 'error',
            'ip': ip,
            'alive': False,
            'message': str(e)
        }), 500

if __name__ == '__main__':
    port = int(os.environ.get('PORT', 5010))
    app.run(host='0.0.0.0', port=port, debug=True)
