from flask import Flask, request, render_template, jsonify
from flask_sqlalchemy import SQLAlchemy
from flask_mail import Mail, Message
import os
from sqlalchemy import text, func, desc
from werkzeug.security import generate_password_hash, check_password_hash
from models import db, Mascota, Servicio, Reserva, Factura, Usuario, Ruta, ParadaRuta, EstanciaHotel, AbonoHotel, DiaSol, DiaSolPago, PagoGuarderia, AsistenciaGuarderia, FacturaGuarderia
from datetime import datetime, timedelta
from apscheduler.schedulers.background import BackgroundScheduler
from flask import jsonify, request
from flask_cors import cross_origin
from flask_cors import CORS

app = Flask(__name__)
app.secret_key = os.environ.get('FLASK_SECRET_KEY') or '8f42a73d4f8c4c1d9c525f68995ced6b2537a quaracer6492'
CORS(app, resources={r"/*": { 
    "origins": ["http://194.163.45.32:83", "http://194.163.45.32"],
    "methods": ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
    "allow_headers": ["Content-Type", "Authorization"],
    "supports_credentials": True
}})
# Configuración de la base de datos
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://postgres:1234@194.163.45.32/guarderiawecanhotel'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db.init_app(app)

# Configuración del servidor de correo
app.config['MAIL_SERVER'] = 'smtp.gmail.com'
app.config['MAIL_PORT'] = 587
app.config['MAIL_USE_TLS'] = True
app.config['MAIL_USE_SSL'] = False
app.config['MAIL_USERNAME'] = 'info@migsistemas.com'
app.config['MAIL_PASSWORD'] = 'eejgelzxmgrfrkdh'
app.config['MAIL_DEFAULT_SENDER'] = 'info@migsistemas.com'
mail = Mail(app)

# Crear todas las tablas en la base de datos
with app.app_context():
    # db.drop_all()  # Solo si necesitas borrar todas las tablas
    db.create_all()

# Ruta para probar la conexión a la base de datos
@app.route('/test_db_connection')
def test_db_connection():
    try:
        # Realizar una consulta de prueba
        result = db.session.execute(text('SELECT 1')).fetchone()
        if result:
            return jsonify({"mensaje": "Conexión exitosa a la base de datos"}), 200
        else:
            return jsonify({"mensaje": "No se pudo realizar la consulta a la base de datos"}), 500
    except Exception as e:
        return jsonify({"mensaje": f"Error al conectarse a la base de datos: {str(e)}"}), 500

# Ruta de prueba
@app.route('/')
def index():
    return render_template('login.html')

# Ruta para el login
@app.route('/login', methods=['POST'])
@cross_origin(supports_credentials=True)
def user_login():
    try:
        data = request.get_json()
        print("Datos recibidos:", data)  # Para depuración

        if not data:
            return jsonify({"success": False, "error": "Datos no recibidos"}), 400

        nombre = data.get('nombre')
        password = data.get('password')

        if not nombre or not password:
            return jsonify({"success": False, "error": "Nombre y contraseña son obligatorios"}), 400

        usuario = Usuario.query.filter(func.lower(Usuario.nombre) == func.lower(nombre)).first()

        if usuario and check_password_hash(usuario.password, password):
            return jsonify({
                "success": True, 
                "nombre": usuario.nombre, 
                "redirect": "/index.html"
            }), 200
        else:
            return jsonify({"success": False, "error": "Nombre o contraseña incorrectos"}), 401
            
    except Exception as e:
        print("Error en login:", str(e))  # Para depuración
        return jsonify({"success": False, "error": str(e)}), 500

# Ruta para mostrar el formulario de registro
@app.route('/pideLicencia.html')
def pide_licencia():
    return render_template('pideLicencia.html')

# Ruta para registrar un nuevo usuario
@app.route('/register', methods=['POST'])
def register():
    data = request.get_json()

    if not (data.get('nombre') and data.get('apellido') and data.get('identificacion') and data.get('email') and data.get('password')):
        return jsonify({"success": False, "error": "Todos los campos son obligatorios"}), 400

    nombre = data.get('nombre')
    apellido = data.get('apellido')
    identificacion = data.get('identificacion')
    email = data.get('email')
    password = data.get('password')

    if Usuario.query.filter_by(email=email).first():
        return jsonify({"success": False, "error": "El correo ya está registrado"}), 400

    hashed_password = generate_password_hash(password)

    nuevo_usuario = Usuario(
        nombre=nombre,
        apellido=apellido,
        identificacion=identificacion,
        email=email,
        password=hashed_password
    )

    try:
        db.session.add(nuevo_usuario)
        db.session.commit()
        return jsonify({"success": True}), 201
    except Exception as e:
        db.session.rollback()
        return jsonify({"success": False, "error": str(e)}), 500

#------------------------------------------------------------------------------------#

#APARTADO PARA LAS MASCOTAS

# Ruta para crear una nueva mascota
@app.route('/mascota', methods=['POST'])
def crear_mascota():
    try:
        data = request.json
        nueva_mascota = Mascota(
            nombre=data['nombre'],
            raza=data.get('raza'),
            edad=data.get('edad'),
            cumpleanos=datetime.strptime(data.get('cumpleanos'), '%Y-%m-%d') if data.get('cumpleanos') else None,
            instagram=data.get('instagram'),
            restricciones=data.get('restricciones'),
            nombre_dueno=data['nombre_dueno'],
            telefono_dueno=data['telefono_dueno'],
            direccion_dueno=data.get('direccion_dueno'),
            email_dueno=data['email_dueno'],
            dias_semana=data.get('dias_semana'),
            dias_totales=data.get('dias_totales'),
            sector=data.get('sector'),
            valor_dia=float(data['valor_dia']) if data.get('valor_dia') else None,
            abono1=float(data['abono1']) if data.get('abono1') else None,
            fecha_abono1=datetime.strptime(data.get('fecha_abono1'), '%Y-%m-%d') if data.get('fecha_abono1') else None,
            abono2=float(data['abono2']) if data.get('abono2') else None,
            fecha_abono2=datetime.strptime(data.get('fecha_abono2'), '%Y-%m-%d') if data.get('fecha_abono2') else None,
            vacuna=data.get('vacuna', False),
            fecha_vacuna=datetime.strptime(data.get('fecha_vacuna'), '%Y-%m-%d') if data.get('fecha_vacuna') else None,
            saldo=float(data.get('saldo', 0)),
            activo=data.get('activo', True),
            notas_adicionales=data.get('notas_adicionales'),
            tipo_servicio=data.get('tipo_servicio', 'regular')
        )
        db.session.add(nueva_mascota)
        db.session.commit()
        return jsonify({"mensaje": "Mascota creada exitosamente", "id": nueva_mascota.id}), 201
    except Exception as e:
        db.session.rollback()
        return jsonify({"error": str(e)}), 400

@app.route('/mascota/<int:mascota_id>', methods=['PUT'])
def actualizar_mascota(mascota_id):
    try:
        mascota = Mascota.query.get_or_404(mascota_id)
        data = request.json
        
        # Actualizar todos los campos
        mascota.nombre = data['nombre']
        mascota.raza = data.get('raza')
        mascota.edad = data.get('edad')
        mascota.cumpleanos = datetime.strptime(data.get('cumpleanos'), '%Y-%m-%d') if data.get('cumpleanos') else None
        mascota.instagram = data.get('instagram')
        mascota.restricciones = data.get('restricciones')
        mascota.nombre_dueno = data['nombre_dueno']
        mascota.telefono_dueno = data['telefono_dueno']
        mascota.direccion_dueno = data.get('direccion_dueno')
        mascota.email_dueno = data['email_dueno']
        mascota.dias_semana = data.get('dias_semana')
        mascota.dias_totales = data.get('dias_totales')
        mascota.sector = data.get('sector')
        mascota.valor_dia = float(data['valor_dia']) if data.get('valor_dia') else None
        mascota.abono1 = float(data['abono1']) if data.get('abono1') else None
        mascota.fecha_abono1 = datetime.strptime(data.get('fecha_abono1'), '%Y-%m-%d') if data.get('fecha_abono1') else None
        mascota.abono2 = float(data['abono2']) if data.get('abono2') else None
        mascota.fecha_abono2 = datetime.strptime(data.get('fecha_abono2'), '%Y-%m-%d') if data.get('fecha_abono2') else None
        mascota.vacuna = data.get('vacuna', False)
        mascota.fecha_vacuna = datetime.strptime(data.get('fecha_vacuna'), '%Y-%m-%d') if data.get('fecha_vacuna') else None
        mascota.notas_adicionales = data.get('notas_adicionales')
        mascota.tipo_servicio = data.get('tipo_servicio', 'regular')
        mascota.activo = data.get('activo', True)
        
        db.session.commit()
        return jsonify({"mensaje": "Mascota actualizada exitosamente"}), 200
    except Exception as e:
        db.session.rollback()
        return jsonify({"error": str(e)}), 400

@app.route('/mascotas', methods=['GET'])
def obtener_mascotas():
    try:
        search = request.args.get('search', '')
        query = Mascota.query
        
        if search:
            search = f"%{search}%"
            query = query.filter(
                (Mascota.nombre.ilike(search)) |
                (Mascota.nombre_dueno.ilike(search)) |
                (Mascota.raza.ilike(search))
            )
        
        mascotas = query.order_by(desc(Mascota.fecha_registro)).all()
        resultados = []
        
        for m in mascotas:
            mascota_dict = {
                "id": m.id,
                "nombre": m.nombre,
                "raza": m.raza,
                "edad": m.edad,
                "cumpleanos": m.cumpleanos.strftime('%Y-%m-%d') if m.cumpleanos else None,
                "instagram": m.instagram,
                "restricciones": m.restricciones,
                "nombre_dueno": m.nombre_dueno,
                "telefono_dueno": m.telefono_dueno,
                "direccion_dueno": m.direccion_dueno,
                "email_dueno": m.email_dueno,
                "dias_semana": m.dias_semana,
                "dias_totales": m.dias_totales,
                "sector": m.sector,
                "valor_dia": m.valor_dia,
                "abono1": m.abono1,
                "fecha_abono1": m.fecha_abono1.strftime('%Y-%m-%d') if m.fecha_abono1 else None,
                "abono2": m.abono2,
                "fecha_abono2": m.fecha_abono2.strftime('%Y-%m-%d') if m.fecha_abono2 else None,
                "vacuna": m.vacuna,
                "fecha_vacuna": m.fecha_vacuna.strftime('%Y-%m-%d') if m.fecha_vacuna else None,
                "saldo": m.saldo,
                "activo": m.activo,
                "fecha_registro": m.fecha_registro.strftime('%Y-%m-%d') if m.fecha_registro else None,
                "ultima_asistencia": m.ultima_asistencia.strftime('%Y-%m-%d') if m.ultima_asistencia else None,
                "notas_adicionales": m.notas_adicionales,
                "tipo_servicio": m.tipo_servicio
            }
            resultados.append(mascota_dict)
            
        # Asegurarse de que siempre devolvemos una lista, incluso si está vacía
        return jsonify(resultados)
        
    except Exception as e:
        # Log del error para debugging
        print(f"Error al obtener mascotas: {str(e)}")
        # Devolver una lista vacía y código de error 500
        return jsonify({"error": str(e), "mensaje": "Error al obtener las mascotas"}), 500

@app.route('/mascota/<int:mascota_id>', methods=['GET', 'PUT', 'DELETE'])
def gestionar_mascota(mascota_id):
    try:
        mascota = Mascota.query.get_or_404(mascota_id)
        
        if request.method == 'GET':
            return jsonify({
                "id": mascota.id,
                "nombre": mascota.nombre,
                "raza": mascota.raza,
                "edad": mascota.edad,
                "cumpleanos": mascota.cumpleanos.strftime('%Y-%m-%d') if mascota.cumpleanos else None,
                "instagram": mascota.instagram,
                "restricciones": mascota.restricciones,
                "nombre_dueno": mascota.nombre_dueno,
                "telefono_dueno": mascota.telefono_dueno,
                "direccion_dueno": mascota.direccion_dueno,
                "email_dueno": mascota.email_dueno,
                "dias_semana": mascota.dias_semana,
                "sector": mascota.sector,
                "valor_dia": mascota.valor_dia,
                "abono1": mascota.abono1,
                "fecha_abono1": mascota.fecha_abono1.strftime('%Y-%m-%d') if mascota.fecha_abono1 else None,
                "abono2": mascota.abono2,
                "fecha_abono2": mascota.fecha_abono2.strftime('%Y-%m-%d') if mascota.fecha_abono2 else None,
                "vacuna": mascota.vacuna,
                "fecha_vacuna": mascota.fecha_vacuna.strftime('%Y-%m-%d') if mascota.fecha_vacuna else None,
                "notas_adicionales": mascota.notas_adicionales,
                "tipo_servicio": mascota.tipo_servicio,
                "activo": mascota.activo
            })
        
        elif request.method == 'PUT':
            data = request.json
            mascota.nombre = data['nombre']
            mascota.raza = data['raza']
            mascota.edad = data.get('edad')
            mascota.cumpleanos = datetime.strptime(data['cumpleanos'], '%Y-%m-%d') if data.get('cumpleanos') else None
            mascota.instagram = data.get('instagram')
            mascota.restricciones = data.get('restricciones')
            mascota.nombre_dueno = data['nombre_dueno']
            mascota.telefono_dueno = data['telefono_dueno']
            mascota.direccion_dueno = data.get('direccion_dueno')
            mascota.email_dueno = data['email_dueno']
            mascota.dias_semana = data.get('dias_semana')
            mascota.sector = data.get('sector')
            mascota.valor_dia = data.get('valor_dia')
            mascota.abono1 = data.get('abono1')
            mascota.fecha_abono1 = datetime.strptime(data['fecha_abono1'], '%Y-%m-%d') if data.get('fecha_abono1') else None
            mascota.abono2 = data.get('abono2')
            mascota.fecha_abono2 = datetime.strptime(data['fecha_abono2'], '%Y-%m-%d') if data.get('fecha_abono2') else None
            mascota.vacuna = data.get('vacuna', False)
            mascota.fecha_vacuna = datetime.strptime(data['fecha_vacuna'], '%Y-%m-%d') if data.get('fecha_vacuna') else None
            mascota.notas_adicionales = data.get('notas_adicionales')
            mascota.tipo_servicio = data.get('tipo_servicio', 'regular')
            
            db.session.commit()
            return jsonify({"mensaje": "Mascota actualizada exitosamente"}), 200
        
        elif request.method == 'DELETE':
            db.session.delete(mascota)
            db.session.commit()
            return jsonify({"mensaje": "Mascota eliminada exitosamente"}), 200
            
    except Exception as e:
        db.session.rollback()
        return jsonify({"error": str(e)}), 400

@app.route('/mascotas/buscar', methods=['GET'])
def buscar_mascotas():
    try:
        termino = request.args.get('q', '')
        if not termino:
            return jsonify([]), 200
            
        mascotas = Mascota.query.filter(
            (Mascota.nombre.ilike(f'%{termino}%')) |
            (Mascota.nombre_dueno.ilike(f'%{termino}%')) |
            (Mascota.raza.ilike(f'%{termino}%'))
        ).all()
        
        return jsonify([{
            "id": m.id,
            "nombre": m.nombre,
            "raza": m.raza,
            "nombre_dueno": m.nombre_dueno
        } for m in mascotas])
    except Exception as e:
        return jsonify({"error": str(e)}), 500

#------------------------------------------------------------------------------------#
# Ruta para crear una reserva
@app.route('/reserva', methods=['POST'])
def crear_reserva():
    data = request.json
    nueva_reserva = Reserva(
        mascota_id=data['mascota_id'],
        servicio_id=data['servicio_id'],
        fecha_inicio=data['fecha_inicio'],
        fecha_fin=data.get('fecha_fin'),
        hora=data.get('hora')
    )
    db.session.add(nueva_reserva)
    db.session.commit()

    msg = Message("Confirmación de Reserva",
                  recipients=[nueva_reserva.mascota.email_dueno])
    msg.body = f"Su reserva para {nueva_reserva.mascota.nombre} ha sido confirmada para el {nueva_reserva.fecha_inicio}."
    mail.send(msg)

    return jsonify({"mensaje": "Reserva creada exitosamente", "id": nueva_reserva.id}), 201

# Ruta para generar una factura
@app.route('/factura', methods=['POST'])
def generar_factura():
    data = request.json
    nueva_factura = Factura(
        reserva_id=data['reserva_id'],
        fecha_emision=data['fecha_emision'],
        monto_total=data['monto_total']
    )
    db.session.add(nueva_factura)
    db.session.commit()

    reserva = Reserva.query.get(nueva_factura.reserva_id)
    msg = Message("Factura de WeCanHotel",
                  recipients=[reserva.mascota.email_dueno])
    msg.body = f"Adjunto encontrará la factura por el servicio prestado a {reserva.mascota.nombre}."
    mail.send(msg)

    return jsonify({"mensaje": "Factura generada exitosamente", "id": nueva_factura.id}), 201

# APARTADO PARA LAS RUTAS

@app.route('/api/rutas/<fecha>', methods=['GET'])
def obtener_rutas(fecha):
    rutas = Ruta.query.filter_by(fecha=datetime.strptime(fecha, '%Y-%m-%d').date()).all()
    return jsonify([{
        'id': ruta.id,
        'mascota': ruta.paradas[0].mascota.nombre if ruta.paradas else 'N/A',
        'direccion': ruta.direccion_recogida,
        'hora': ruta.hora_recogida.strftime('%H:%M') if ruta.hora_recogida else 'N/A',
        'conductor': ruta.conductor,
        'estado': ruta.estado
    } for ruta in rutas])

@app.route('/completar-ruta/<int:ruta_id>', methods=['POST'])
def completar_ruta(ruta_id):
    ruta = Ruta.query.get_or_404(ruta_id)
    ruta.estado = 'completada'
    ruta.hora_fin = datetime.now().time()
    db.session.commit()
    return jsonify({"mensaje": "Ruta completada"})

@app.route('/ruta', methods=['POST'])
def crear_ruta():
    try:
        data = request.json
        nueva_ruta = Ruta(
            nombre=data['nombre'],
            hora_recogida=datetime.strptime(data['hora_recogida'], '%H:%M').time(),
            hora_inicio=datetime.strptime(data['hora_inicio'], '%H:%M').time(),
            direccion_recogida=data['direccion_recogida'],
            conductor=data['conductor'],
            fecha=datetime.strptime(data['fecha'], '%Y-%m-%d').date(),
            descripcion=data['descripcion'],
            estado='pendiente',
            notificacion_enviada=False
        )
        
        # Crear la parada asociada
        parada = ParadaRuta(
            mascota_id=data['mascota_id'],
            orden=1,
            completada=False
        )
        nueva_ruta.paradas.append(parada)
        
        db.session.add(nueva_ruta)
        db.session.commit()
        
        return jsonify({"mensaje": "Ruta creada exitosamente", "id": nueva_ruta.id}), 201
        
    except Exception as e:
        db.session.rollback()
        return jsonify({"error": str(e)}), 500

#---------------------------------------------------------------------------#

# Función para notificaciones
@app.route('/api/notificacion/<int:ruta_id>', methods=['POST'])
def actualizar_notificacion(ruta_id):
    data = request.json
    ruta = Ruta.query.get_or_404(ruta_id)
    
    if data['tipo'] == 'notificacion_60':
        ruta.notificacion_60 = True
    elif data['tipo'] == 'notificacion_30':
        ruta.notificacion_30 = True
    elif data['tipo'] == 'completada':
        ruta.estado = 'completada'
        enviar_notificacion_completada(ruta)
    
    db.session.commit()
    return jsonify({'mensaje': 'Notificación actualizada'})

def enviar_notificacion_completada(ruta):
    msg = Message(
        "Ruta Completada",
        recipients=[ruta.paradas[0].mascota.email_dueno],
        body=f"La ruta de {ruta.paradas[0].mascota.nombre} ha sido completada."
    )
    mail.send(msg)


#----------------------------------------------------------------------------------#


# Rutas para el módulo de Hotel
@app.route('/api/mascota/<int:mascota_id>', methods=['GET'])  # Cambiar esta ruta
@cross_origin()
def obtener_mascota_api(mascota_id):
    try:
        mascota = Mascota.query.get_or_404(mascota_id)
        return jsonify({
            "id": mascota.id,
            "nombre": mascota.nombre,
            "nombre_dueno": mascota.nombre_dueno,
            "raza": mascota.raza,
            "valor_dia": mascota.valor_dia,
            "restricciones": mascota.restricciones
        })
    except Exception as e:
        return jsonify({"error": str(e)}), 500

@app.route('/api/hotel/estancia', methods=['POST'])
@cross_origin()
def crear_estancia_hotel():
    try:
        data = request.json
        print("Datos recibidos:", data)  # Para debug
        
        # Verificar datos requeridos
        required_fields = ['mascota_id', 'mascota_nombre', 'fecha_ingreso', 'fecha_salida', 'valor_dia']
        for field in required_fields:
            if field not in data:
                return jsonify({'error': f'Campo requerido: {field}'}), 400

        # Crear la estancia
        nueva_estancia = EstanciaHotel(
            mascota_id=data['mascota_id'],
            fecha_ingreso=datetime.strptime(data['fecha_ingreso'], '%Y-%m-%d').date(),
            fecha_salida=datetime.strptime(data['fecha_salida'], '%Y-%m-%d').date(),
            valor_dia=data['valor_dia'],
            transporte=data.get('transporte', 0),
            vacuna=data.get('vacuna', 0),
            bano=data.get('bano', 0),
            cuido=data.get('cuido', 0),
            observaciones=data.get('observaciones', '')
        )
        
        # Calcular valores
        delta = nueva_estancia.fecha_salida - nueva_estancia.fecha_ingreso
        nueva_estancia.noches = delta.days
        nueva_estancia.total = (nueva_estancia.valor_dia * nueva_estancia.noches +
                              nueva_estancia.transporte + nueva_estancia.vacuna +
                              nueva_estancia.bano + nueva_estancia.cuido)
        nueva_estancia.saldo = nueva_estancia.total
        
        db.session.add(nueva_estancia)
        db.session.commit()
        
        return jsonify({
            'mensaje': 'Estancia creada exitosamente',
            'id': nueva_estancia.id
        }), 201
        
    except Exception as e:
        db.session.rollback()
        print("Error:", str(e))  # Para debug
        return jsonify({'error': str(e)}), 500

@app.route('/api/hotel/estancias', methods=['GET'])
@cross_origin()
def obtener_estancias_hotel():
    try:
        # Obtener todas las estancias y ordenarlas por fecha de ingreso descendente
        estancias = EstanciaHotel.query.order_by(EstanciaHotel.fecha_ingreso.desc()).all()
        
        return jsonify([{
            'id': e.id,
            'mascota_nombre': e.mascota.nombre,
            'dueno_nombre': e.mascota.nombre_dueno,
            'fecha_ingreso': e.fecha_ingreso.strftime('%Y-%m-%d'),
            'fecha_salida': e.fecha_salida.strftime('%Y-%m-%d'),
            'noches': e.noches,
            'valor_dia': e.valor_dia,
            'transporte': e.transporte,
            'vacuna': e.vacuna,
            'bano': e.bano,
            'cuido': e.cuido,
            'total': e.total,
            'saldo': e.saldo,
            'observaciones': e.observaciones,
            'abonos': [{
                'fecha': a.fecha.strftime('%Y-%m-%d'),
                'monto': a.monto,
                'numero_abono': a.numero_abono
            } for a in e.abonos]
        } for e in estancias])
    except Exception as e:
        print(f"Error al obtener estancias: {str(e)}")  # Para depuración
        return jsonify({'error': str(e)}), 500

@app.route('/api/hotel/estancia/<int:estancia_id>', methods=['GET'])
@cross_origin()
def obtener_estancia_hotel(estancia_id):
    try:
        estancia = EstanciaHotel.query.get_or_404(estancia_id)
        return jsonify({
            'id': estancia.id,
            'mascota_nombre': estancia.mascota.nombre,
            'dueno_nombre': estancia.mascota.nombre_dueno,
            'fecha_ingreso': estancia.fecha_ingreso.strftime('%Y-%m-%d'),
            'fecha_salida': estancia.fecha_salida.strftime('%Y-%m-%d'),
            'noches': estancia.noches,
            'valor_dia': estancia.valor_dia,
            'transporte': estancia.transporte,
            'vacuna': estancia.vacuna,
            'bano': estancia.bano,
            'cuido': estancia.cuido,
            'total': estancia.total,
            'saldo': estancia.saldo,
            'observaciones': estancia.observaciones,
            'abonos': [{
                'fecha': a.fecha.strftime('%Y-%m-%d'),
                'monto': a.monto,
                'numero_abono': a.numero_abono
            } for a in estancia.abonos]
        })
    except Exception as e:
        return jsonify({'error': str(e)}), 500

@app.route('/api/hotel/estancia/<int:estancia_id>', methods=['PUT'])
@cross_origin()
def actualizar_estancia_hotel(estancia_id):
    try:
        estancia = EstanciaHotel.query.get_or_404(estancia_id)
        data = request.json
        
        # Actualizar mascota si cambió el nombre
        if (data['mascota_nombre'] != estancia.mascota.nombre or 
            data['dueno_nombre'] != estancia.mascota.nombre_dueno):
            mascota = Mascota.query.filter_by(
                nombre=data['mascota_nombre'],
                nombre_dueno=data['dueno_nombre']
            ).first()
            
            if not mascota:
                mascota = Mascota(
                    nombre=data['mascota_nombre'],
                    nombre_dueno=data['dueno_nombre']
                )
                db.session.add(mascota)
                db.session.flush()
            
            estancia.mascota_id = mascota.id
        
        # Actualizar datos de la estancia
        estancia.fecha_ingreso = datetime.strptime(data['fecha_ingreso'], '%Y-%m-%d').date()
        estancia.fecha_salida = datetime.strptime(data['fecha_salida'], '%Y-%m-%d').date()
        estancia.valor_dia = data['valor_dia']
        estancia.transporte = data.get('transporte', 0)
        estancia.vacuna = data.get('vacuna', 0)
        estancia.bano = data.get('bano', 0)
        estancia.cuido = data.get('cuido', 0)
        estancia.observaciones = data.get('observaciones', '')
        
        # Recalcular noches y total
        delta = estancia.fecha_salida - estancia.fecha_ingreso
        estancia.noches = delta.days
        nuevo_total = (estancia.valor_dia * estancia.noches +
                      estancia.transporte + estancia.vacuna +
                      estancia.bano + estancia.cuido)
        
        # Actualizar saldo considerando los pagos realizados
        pagos_realizados = sum(abono.monto for abono in estancia.abonos)
        estancia.total = nuevo_total
        estancia.saldo = nuevo_total - pagos_realizados
        
        db.session.commit()
        return jsonify({'mensaje': 'Estancia actualizada exitosamente'}), 200
        
    except Exception as e:
        db.session.rollback()
        return jsonify({'error': str(e)}), 500

@app.route('/api/hotel/estancia/<int:estancia_id>', methods=['DELETE'])
@cross_origin()
def eliminar_estancia_hotel(estancia_id):
    try:
        estancia = EstanciaHotel.query.get_or_404(estancia_id)
        db.session.delete(estancia)
        db.session.commit()
        return jsonify({'mensaje': 'Estancia eliminada exitosamente'}), 200
    except Exception as e:
        db.session.rollback()
        return jsonify({'error': str(e)}), 500

@app.route('/api/hotel/abono', methods=['POST'])
@cross_origin()
def registrar_abono_hotel():
    try:
        data = request.json
        estancia = EstanciaHotel.query.get_or_404(data['estancia_id'])
        
        # Verificar si ya hay dos abonos
        abonos_count = len(estancia.abonos)
        if abonos_count >= 2:
            return jsonify({'error': 'Ya se han registrado dos abonos'}), 400
            
        # Verificar que el monto no exceda el saldo
        if data['monto'] > estancia.saldo:
            return jsonify({'error': 'El monto no puede ser mayor al saldo'}), 400
            
        nuevo_abono = AbonoHotel(
            estancia_id=estancia.id,
            fecha=datetime.now().date(),
            monto=data['monto'],
            numero_abono=abonos_count + 1
        )
        
        estancia.saldo -= data['monto']
        
        db.session.add(nuevo_abono)
        db.session.commit()
        
        return jsonify({'mensaje': 'Abono registrado exitosamente'}), 201
        
    except Exception as e:
        db.session.rollback()
        return jsonify({'error': str(e)}), 500

@app.route('/api/mascotas/search', methods=['GET'])
@cross_origin()
def buscar_mascotas_select2():
    try:
        termino = request.args.get('q', '')
        if not termino:
            return jsonify([]), 200
            
        mascotas = Mascota.query.filter(
            (Mascota.nombre.ilike(f'%{termino}%')) |
            (Mascota.nombre_dueno.ilike(f'%{termino}%')) |
            (Mascota.raza.ilike(f'%{termino}%'))
        ).all()
        
        # Formato esperado por Select2
        return jsonify([{
            "id": m.id,
            "text": f"{m.nombre} - {m.nombre_dueno}"
        } for m in mascotas])
    except Exception as e:
        return jsonify({"error": str(e)}), 500

#-----------------------------------------------------------------------------------------------#

# APARTADO DE DIASOL

# Ruta para obtener mascotas para el select de día de sol
@app.route('/api/mascotas', methods=['GET'])
@cross_origin()
def obtener_mascotas_diasol():
    try:
        search = request.args.get('search', '')
        query = Mascota.query
        
        if search:
            search = f"%{search}%"
            query = query.filter(
                (Mascota.nombre.ilike(search)) |
                (Mascota.nombre_dueno.ilike(search)) |
                (Mascota.raza.ilike(search))
            )
        
        mascotas = query.all()
        return jsonify([{
            "id": m.id,
            "nombre": m.nombre,
            "nombre_dueno": m.nombre_dueno,
            "valor_dia": m.valor_dia
        } for m in mascotas])
        
    except Exception as e:
        print(f"Error al obtener mascotas: {str(e)}")
        return jsonify({"error": str(e)}), 500

# Ruta para obtener detalles de una mascota específica
@app.route('/api/mascota/<int:mascota_id>', methods=['GET'])
@cross_origin()
def obtener_mascota_diasol(mascota_id):
    try:
        mascota = Mascota.query.get_or_404(mascota_id)
        return jsonify({
            "id": mascota.id,
            "nombre": mascota.nombre,
            "nombre_dueno": mascota.nombre_dueno,
            "valor_dia": mascota.valor_dia
        })
    except Exception as e:
        return jsonify({"error": str(e)}), 500

@app.route('/api/diasol', methods=['POST'])
@cross_origin()
def crear_dia_sol():
    try:
        data = request.json
        nuevo_dia_sol = DiaSol(
            mascota_id=data['mascota_id'],
            fecha=datetime.strptime(data['fecha'], '%Y-%m-%d').date(),
            servicio=data['servicio'],
            transporte=data.get('transporte', False),
            valor_servicio=float(data['valor_servicio']),
            valor_transporte=float(data.get('valor_transporte', 0)),
            pago=float(data.get('pago', 0)),
            observaciones=data.get('observaciones', ''),
        )
        
        # Calcular saldo CORRECTAMENTE
        total = nuevo_dia_sol.valor_servicio + nuevo_dia_sol.valor_transporte
        nuevo_dia_sol.saldo = total - nuevo_dia_sol.pago  # Aquí está el cálculo correcto
        
        db.session.add(nuevo_dia_sol)
        db.session.commit()
        
        return jsonify({
            'mensaje': 'Día de Sol registrado exitosamente',
            'id': nuevo_dia_sol.id
        }), 201
        
    except Exception as e:
        db.session.rollback()
        return jsonify({'error': str(e)}), 500

@app.route('/api/diasol', methods=['GET'])
@cross_origin()
def obtener_dias_sol():
    try:
        fecha = request.args.get('fecha')
        estado = request.args.get('estado', 'pendiente')  # Por defecto mostrar pendientes
        
        query = DiaSol.query
        
        if fecha:
            query = query.filter(DiaSol.fecha == datetime.strptime(fecha, '%Y-%m-%d').date())
        
        # Filtrar por estado
        if estado != 'todos':
            query = query.filter(DiaSol.estado == estado)
        
        # Ordenar por fecha descendente
        dias_sol = query.order_by(DiaSol.fecha.desc()).all()
        
        return jsonify([{
            'id': ds.id,
            'mascota': {
                'id': ds.mascota.id,
                'nombre': ds.mascota.nombre,
                'dueno': ds.mascota.nombre_dueno
            },
            'fecha': ds.fecha.strftime('%Y-%m-%d'),
            'servicio': ds.servicio,
            'transporte': ds.transporte,
            'valor_servicio': ds.valor_servicio,
            'valor_transporte': ds.valor_transporte,
            'pago': ds.pago,
            'saldo': ds.saldo,
            'observaciones': ds.observaciones,
            'estado': ds.estado
        } for ds in dias_sol])
        
    except Exception as e:
        return jsonify({'error': str(e)}), 500

@app.route('/api/diasol/<int:id>', methods=['PUT'])
@cross_origin()
def actualizar_dia_sol(id):
    try:
        dia_sol = DiaSol.query.get_or_404(id)
        data = request.json
        
        dia_sol.servicio = data.get('servicio', dia_sol.servicio)
        dia_sol.transporte = data.get('transporte', dia_sol.transporte)
        dia_sol.valor_servicio = float(data.get('valor_servicio', dia_sol.valor_servicio))
        dia_sol.valor_transporte = float(data.get('valor_transporte', dia_sol.valor_transporte))
        dia_sol.pago = float(data.get('pago', dia_sol.pago))
        dia_sol.observaciones = data.get('observaciones', dia_sol.observaciones)
        
        # Recalcular saldo
        total = dia_sol.valor_servicio + dia_sol.valor_transporte
        dia_sol.saldo = total - dia_sol.pago
        
        db.session.commit()
        
        return jsonify({'mensaje': 'Día de Sol actualizado exitosamente'})
        
    except Exception as e:
        db.session.rollback()
        return jsonify({'error': str(e)}), 500

@app.route('/api/diasol/<int:id>', methods=['DELETE'])
@cross_origin()
def eliminar_dia_sol(id):
    try:
        dia_sol = DiaSol.query.get_or_404(id)
        db.session.delete(dia_sol)
        db.session.commit()
        return jsonify({'mensaje': 'Día de Sol eliminado exitosamente'})
    except Exception as e:
        db.session.rollback()
        return jsonify({'error': str(e)}), 500

@app.route('/api/diasol/<int:id>/complete', methods=['POST'])
@cross_origin()
def completar_dia_sol(id):
    try:
        data = request.get_json()
        dia_sol = DiaSol.query.get_or_404(id)
        
        pago_final = float(data.get('pago_final', 0))
        if pago_final < 0:
            return jsonify({'error': 'El pago no puede ser negativo'}), 400

        # Aquí está el problema - estamos sumando al pago existente
        dia_sol.pago += pago_final  # Esto causa que se acumulen los pagos
        
        # Deberíamos verificar que el pago no exceda el total
        total = dia_sol.valor_servicio + dia_sol.valor_transporte
        if dia_sol.pago > total:
            return jsonify({'error': 'El pago excede el total del servicio'}), 400
            
        # Calcular saldo correctamente
        dia_sol.saldo = total - dia_sol.pago
        
        # Crear registro de pago
        nuevo_pago = DiaSolPago(
            dia_sol_id=dia_sol.id,
            fecha=datetime.now().date(),
            monto=pago_final,
            numero_pago=len(dia_sol.pagos) + 1
        )
        
        # Actualizar estado
        if dia_sol.saldo <= 0:
            dia_sol.estado = 'completado'
        else:
            dia_sol.estado = 'pendiente'
            
        db.session.add(nuevo_pago)
        db.session.commit()
        
        return jsonify({
            'mensaje': 'Pago registrado exitosamente',
            'saldo_pendiente': dia_sol.saldo,
            'estado': dia_sol.estado,
            'pago_id': nuevo_pago.id
        }), 200
        
    except Exception as e:
        db.session.rollback()
        print(f"Error en completar_dia_sol: {str(e)}")
        return jsonify({'error': str(e)}), 500

#-----------------------------------------------------------------------------------------------#

# APARTADO DE LA GUARDERIA

@app.route('/api/guarderia/asistencia', methods=['POST'])
@cross_origin()
def registrar_asistencia():
    try:
        data = request.json
        nueva_asistencia = AsistenciaGuarderia(
            mascota_id=data['mascota_id'],
            fecha=datetime.strptime(data['fecha'], '%Y-%m-%d').date(),
            hora_entrada=datetime.strptime(data['hora_entrada'], '%H:%M').time() if data.get('hora_entrada') else None,
            hora_salida=datetime.strptime(data['hora_salida'], '%H:%M').time() if data.get('hora_salida') else None,
            recogida=data.get('recogida', False),
            entrega=data.get('entrega', False),
            observaciones_dia=data.get('observaciones', '')
        )
        db.session.add(nueva_asistencia)
        db.session.commit()
        return jsonify({'mensaje': 'Asistencia registrada exitosamente'}), 201
    except Exception as e:
        db.session.rollback()
        return jsonify({'error': str(e)}), 500

@app.route('/api/guarderia/asistencia/<fecha>', methods=['GET'])
@cross_origin()
def obtener_asistencias(fecha):
    try:
        fecha_obj = datetime.strptime(fecha, '%Y-%m-%d').date()
        asistencias = AsistenciaGuarderia.query.filter_by(fecha=fecha_obj).all()
        return jsonify([{
            'id': a.id,
            'mascota_id': a.mascota_id,
            'mascota_nombre': a.mascota.nombre,
            'hora_entrada': a.hora_entrada.strftime('%H:%M') if a.hora_entrada else None,
            'hora_salida': a.hora_salida.strftime('%H:%M') if a.hora_salida else None,
            'recogida': a.recogida,
            'entrega': a.entrega,
            'observaciones': a.observaciones_dia
        } for a in asistencias])
    except Exception as e:
        return jsonify({'error': str(e)}), 500

# Ruta para obtener pagos
@app.route('/api/guarderia/pagos', methods=['GET'])
@cross_origin()
def obtener_pagos_guarderia():
    try:
        # Obtener todas las mascotas con guardería
        mascotas = Mascota.query.filter_by(tipo_servicio='guarderia').all()
        
        resultados = []
        for mascota in mascotas:
            # Obtener los últimos pagos de la mascota
            pagos = PagoGuarderia.query.filter_by(mascota_id=mascota.id).order_by(PagoGuarderia.fecha_pago.desc()).all()
            
            # Calcular abonos
            abono1 = next((p.monto for p in pagos if p.tipo_pago == 'abono1'), None)
            abono2 = next((p.monto for p in pagos if p.tipo_pago == 'abono2'), None)
            pago_final = next((p.monto for p in pagos if p.tipo_pago == 'pago_final'), None)
            
            resultados.append({
                'id': pagos[0].id if pagos else None,
                'mascota_id': mascota.id,
                'mascota_nombre': mascota.nombre,
                'sector': mascota.sector,
                'valor_mensual': mascota.valor_dia * 30 if mascota.valor_dia else 0,
                'abono1': abono1,
                'abono2': abono2,
                'pago_final': pago_final,
                'saldo': mascota.saldo,
                'fecha_pago': pagos[0].fecha_pago.strftime('%Y-%m-%d') if pagos else None,
                'tipo_pago': pagos[0].tipo_pago if pagos else None,
                'periodo_inicio': pagos[0].periodo_inicio.strftime('%Y-%m-%d') if pagos and pagos[0].periodo_inicio else None,
                'periodo_fin': pagos[0].periodo_fin.strftime('%Y-%m-%d') if pagos and pagos[0].periodo_fin else None,
                'observaciones': pagos[0].observaciones if pagos else None
            })
        
        return jsonify(resultados)
    except Exception as e:
        return jsonify({'error': str(e)}), 500

@app.route('/api/guarderia/pagos/historial/<int:mascota_id>', methods=['GET'])
@cross_origin()
def obtener_historial_pagos(mascota_id):
    try:
        pagos = PagoGuarderia.query.filter_by(mascota_id=mascota_id).order_by(PagoGuarderia.fecha_pago.desc()).all()
        
        return jsonify([{
            'id': pago.id,
            'fecha_pago': pago.fecha_pago.strftime('%Y-%m-%d'),
            'monto': pago.monto,
            'tipo_pago': pago.tipo_pago,
            'observaciones': pago.observaciones
        } for pago in pagos])
    except Exception as e:
        return jsonify({'error': str(e)}), 500

@app.route('/api/guarderia/pagos', methods=['POST'])
@cross_origin()
def registrar_pago_guarderia():
    try:
        data = request.json
        # Validar datos requeridos
        required_fields = ['mascota_id', 'monto', 'tipo_pago']
        if not all(field in data for field in required_fields):
            return jsonify({'error': 'Faltan campos requeridos'}), 400

        # Validar que el monto sea positivo
        if float(data['monto']) <= 0:
            return jsonify({'error': 'El monto debe ser positivo'}), 400

        # Validar que la mascota exista
        mascota = Mascota.query.get(data['mascota_id'])
        if not mascota:
            return jsonify({'error': 'Mascota no encontrada'}), 404

        nuevo_pago = PagoGuarderia(
            mascota_id=data['mascota_id'],
            fecha_pago=datetime.strptime(data['fecha_pago'], '%Y-%m-%d').date() if data.get('fecha_pago') else datetime.now().date(),
            monto=float(data['monto']),
            tipo_pago=data['tipo_pago'],
            periodo_inicio=datetime.strptime(data['periodo_inicio'], '%Y-%m-%d').date() if data.get('periodo_inicio') else None,
            periodo_fin=datetime.strptime(data['periodo_fin'], '%Y-%m-%d').date() if data.get('periodo_fin') else None,
            observaciones=data.get('observaciones', '')
        )
        
        # Actualizar saldo de la mascota
        mascota.saldo = float(mascota.saldo or 0) - float(data['monto'])
        
        db.session.add(nuevo_pago)
        db.session.commit()
        
        return jsonify({
            'mensaje': 'Pago registrado exitosamente',
            'nuevo_saldo': mascota.saldo
        }), 201
    except ValueError as e:
        db.session.rollback()
        return jsonify({'error': 'Error en el formato de los datos'}), 400
    except Exception as e:
        db.session.rollback()
        return jsonify({'error': str(e)}), 500

@app.route('/api/guarderia/pagos/<int:pago_id>', methods=['GET'])
@cross_origin()
def obtener_detalle_pago(pago_id):
    try:
        pago = PagoGuarderia.query.get(pago_id)
        if not pago:
            return jsonify({'error': 'Pago no encontrado'}), 404
            
        return jsonify({
            'id': pago.id,
            'mascota_id': pago.mascota_id,
            'mascota_nombre': pago.mascota.nombre,
            'fecha_pago': pago.fecha_pago.strftime('%Y-%m-%d'),
            'monto': pago.monto,
            'tipo_pago': pago.tipo_pago,
            'periodo_inicio': pago.periodo_inicio.strftime('%Y-%m-%d') if pago.periodo_inicio else None,
            'periodo_fin': pago.periodo_fin.strftime('%Y-%m-%d') if pago.periodo_fin else None,
            'observaciones': pago.observaciones
        })
    except Exception as e:
        return jsonify({'error': str(e)}), 500

@app.route('/api/guarderia/mascotas', methods=['GET'])
@cross_origin()
def obtener_mascotas_guarderia():
    try:
        # Filtrar solo mascotas activas en guardería
        mascotas = Mascota.query.filter_by(
            activo=True,
            tipo_servicio='guarderia'
        ).all()
        
        return jsonify([{
            'id': m.id,
            'nombre': m.nombre,
            'raza': m.raza,
            'cumpleanos': m.cumpleanos.strftime('%Y-%m-%d') if m.cumpleanos else None,
            'instagram': m.instagram,
            'restricciones': m.restricciones,
            'nombre_dueno': m.nombre_dueno,
            'telefono_dueno': m.telefono_dueno,
            'direccion_dueno': m.direccion_dueno,
            'dias_semana': m.dias_semana,
            'dias_totales': m.dias_totales,
            'sector': m.sector,
            'valor_dia': m.valor_dia,
            'saldo': m.saldo,
            'ultima_asistencia': m.ultima_asistencia.strftime('%Y-%m-%d') if m.ultima_asistencia else None
        } for m in mascotas])
    except Exception as e:
        return jsonify({'error': str(e)}), 500
    
@app.route('/api/guarderia/asistencia/<int:id>/recogida', methods=['POST'])
@cross_origin()
def actualizar_recogida(id):
    try:
        asistencia = AsistenciaGuarderia.query.get(id)
        if not asistencia:
            return jsonify({'error': 'Asistencia no encontrada'}), 404

        # Cambiar el estado de recogida
        asistencia.recogida = not asistencia.recogida
        db.session.commit()

        return jsonify({'mensaje': 'Recogida actualizada exitosamente', 'estado': asistencia.recogida}), 200
    except Exception as e:
        db.session.rollback()
        return jsonify({'error': str(e)}), 500

@app.route('/api/guarderia/asistencia/<int:id>/entrega', methods=['POST'])
@cross_origin()
def actualizar_entrega(id):
    try:
        asistencia = AsistenciaGuarderia.query.get(id)
        if not asistencia:
            return jsonify({'error': 'Asistencia no encontrada'}), 404

        # Cambiar el estado de entrega
        asistencia.entrega = not asistencia.entrega
        db.session.commit()

        return jsonify({'mensaje': 'Entrega actualizada exitosamente', 'estado': asistencia.entrega}), 200
    except Exception as e:
        db.session.rollback()
        return jsonify({'error': str(e)}), 500

@app.route('/api/guarderia/asistencia/<int:id>', methods=['GET'])
@cross_origin()
def obtener_asistencia(id):
    try:
        asistencia = AsistenciaGuarderia.query.get(id)
        if not asistencia:
            return jsonify({'error': 'Asistencia no encontrada'}), 404

        return jsonify({
            'id': asistencia.id,
            'mascota_id': asistencia.mascota_id,
            'fecha': asistencia.fecha.strftime('%Y-%m-%d'),
            'hora_entrada': asistencia.hora_entrada.strftime('%H:%M') if asistencia.hora_entrada else None,
            'hora_salida': asistencia.hora_salida.strftime('%H:%M') if asistencia.hora_salida else None,
            'recogida': asistencia.recogida,
            'entrega': asistencia.entrega,
            'observaciones': asistencia.observaciones_dia
        }), 200
    except Exception as e:
        return jsonify({'error': str(e)}), 500
    
@app.route('/api/guarderia/asistencia/<int:id>', methods=['DELETE'])
@cross_origin()
def eliminar_asistencia(id):
    try:
        asistencia = AsistenciaGuarderia.query.get(id)
        if not asistencia:
            return jsonify({'error': 'Asistencia no encontrada'}), 404

        db.session.delete(asistencia)
        db.session.commit()

        return jsonify({'mensaje': 'Asistencia eliminada exitosamente'}), 200
    except Exception as e:
        db.session.rollback()
        return jsonify({'error': str(e)}), 500

@app.route('/api/guarderia/facturas', methods=['POST'])
@cross_origin()
def crear_factura_guarderia():
    try:
        data = request.json
        
        # Validar datos requeridos
        if not all(field in data for field in ['mascota_id', 'periodo_inicio', 'periodo_fin', 'valor_mensual', 'valor_transporte']):
            return jsonify({'error': 'Faltan campos requeridos'}), 400

        # Crear la factura
        nueva_factura = FacturaGuarderia(
            mascota_id=data['mascota_id'],
            fecha_emision=datetime.now().date(),
            periodo_inicio=datetime.strptime(data['periodo_inicio'], '%Y-%m-%d').date(),
            periodo_fin=datetime.strptime(data['periodo_fin'], '%Y-%m-%d').date(),
            valor_mensual=float(data['valor_mensual']),
            valor_transporte=float(data['valor_transporte']),
            valor_adicionales=float(data.get('valor_adicionales', 0)),
            monto_total=float(data['monto_total']),
            saldo_pendiente=float(data['monto_total']),  # Inicialmente el saldo pendiente es igual al total
            estado='pendiente',
            observaciones=data.get('observaciones', '')
        )
        
        # Actualizar saldo de la mascota
        mascota = Mascota.query.get(data['mascota_id'])
        if mascota:
            mascota.saldo = float(mascota.saldo or 0) + float(data['monto_total'])
        
        db.session.add(nueva_factura)
        db.session.commit()
        
        return jsonify({
            'mensaje': 'Factura creada exitosamente',
            'factura_id': nueva_factura.id,
            'nuevo_saldo': mascota.saldo
        }), 201
        
    except ValueError as e:
        db.session.rollback()
        return jsonify({'error': 'Error en el formato de los datos'}), 400
    except Exception as e:
        db.session.rollback()
        return jsonify({'error': str(e)}), 500
#-----------------------------------------------------------------------------------------------#

# Ruta para mostrar la página principal
@app.route('/index.html')
def index_page():
    return render_template('index.html')

# Ruta para mostrar la página de mascotas
@app.route('/mascotas.html')
def mascotas_page():
    return render_template('mascotas.html')

# Ruta para mostrar la página de informes
@app.route('/informes.html')
def informes_page():
    return render_template('informes.html')

# Ruta para mostrar la página de servicios
@app.route('/servicios.html')
def servicios_page():
    return render_template('servicios.html')

# Ruta para mostrar la página de servicios
@app.route('/hotel.html')
def hotel_page():
    return render_template('hotel.html')

# Ruta para mostrar la página de servicios
@app.route('/diasol.html')
def diasol_page():
    return render_template('diasol.html')

# Ruta para mostrar la página de servicios
@app.route('/guarderia.html')
def guarderia_page():
    return render_template('guarderia.html')

# Ruta para mostrar la página de rutas
@app.route('/rutas.html')
def rutas_page():
    return render_template('rutas.html')

@app.route('/test', methods=['GET'])
def test():
    return jsonify({"status": "ok"}), 200
if __name__ == '__main__':
    app.run(debug=True)
