import json
import flyoma
import flysfo
import gatewayairport
import orlandoairports
import skyharbor
import flysanjose
import sacramento
import ocair
import oaklandairport
import aspenairport
import flyilg
import flymsy
import portlandjetport
import bwiairport
import grr
import ind
import mspairport
import flystl
import renoairport
import newarkairport
import jfkairport
import flyilm
import cltairport
import flyavl
import flycolumbus
import flypdx
import flyavp
import flypittsburgh
import gspairport
import flycae
import sfairport
import btv
import flynashville
from apscheduler.schedulers.background import BackgroundScheduler
import threading
from flask_cors import CORS
from flask import Flask,jsonify, redirect,request
from routes.routes import routes_bp
from database import db
from config import Config
app = Flask(__name__,)

app.config.from_object(Config)


app.register_blueprint(routes_bp, url_prefix='/api')
CORS(app, supports_credentials=True)

scheduler = BackgroundScheduler()

sites={
    "San Francisco International Airport":flysfo,
    "Phoenix-Mesa Gateway Airport":gatewayairport,
    "Phoenix Sky Harbor International Airport":skyharbor,
    "San Jose Mineta International Airport":flysanjose,
    "Sacramento International Airport":sacramento,
    "John Wayne Airport":ocair,
    "San Francisco Bay Oakland International Airport":oaklandairport,
    "Aspen/Pitkin County Airport":aspenairport,
    "Wilmington Airport":flyilg,
    "Louis Armstrong New Orleans International Airport":flymsy,
    "Portland International Jetport":portlandjetport,
    "Baltimore/Washington International Thurgood Marshall Airport":bwiairport,
    "Indianapolis International Airport":ind,
    "St. Louis Lambert International Airport":flystl,
    "Reno-Tahoe International Airport":renoairport,
    "Newark Liberty International Airport":newarkairport,
    "John F. Kennedy International Airport":jfkairport,
    "Wilmington International Airport":flyilm,
    "Gerald R. Ford International Airport":grr,
    "Minneapolis–Saint Paul International Airport":mspairport,
    "Eppley Airfield":flyoma,
    "Portland International Airport":flypdx,
    "Charlotte Douglas International Airport":cltairport, 
    "Asheville Regional Airport":flyavl,
    "John Glenn Columbus International Airport":flycolumbus,
    "Wilkes-Barre Scranton International Airport":flyavp, 
    "Pittsburgh International Airport":flypittsburgh, 
    "Greenville-Spartanburg International Airport":gspairport,
    "Columbia Metropolitan Airport":flycae,
    "Sioux Falls Regional Airport":sfairport,
    "Burlington International Airport":btv,
    "Nashville International Airport":flynashville,
    "Orlando International Airport":orlandoairports
}

@app.route('/scraping_data',methods=['GET'])
def get_scraping_data():
    param1 = request.args.get('site_name')
    data = sites[param1].get_json_data()
    return jsonify({'success': True,"data":data}), 200

@app.route('/scraping_data',methods=['POST'])
def craping_data():
    message = json.loads(request.data)
    print(message)
    return jsonify({'success': True}), 200


def start_scraping():
    with app.app_context():
        for x in (flysfo, gatewayairport, skyharbor, flysanjose, sacramento, ocair, oaklandairport, aspenairport, flyilg, flymsy, portlandjetport, bwiairport, ind, flystl, renoairport, newarkairport, jfkairport, flyilm, grr, mspairport,flyoma,flypdx,cltairport,flyavl,flycolumbus,flyavp,flypittsburgh,gspairport,flycae,sfairport,btv,flynashville,orlandoairports):
            data = x.get_json_data()
            
scheduler.add_job(start_scraping, 'interval', seconds=900)
if __name__ == '__main__':
    # scheduler.start()
    try:
            print("Scheduler started. Press Ctrl+C to exit.")
            scheduler_thread = threading.Thread(target=scheduler.start)
            scheduler_thread.start()
            with app.app_context():
                db.init_app(app)
                try:
                    print("Current database:", db.get_db().name)
                    print(f"Connection successful! Server status")
                except Exception as e:
                    print(f"Connection failed: {str(e)}")
            app.run(host="0.0.0.0", port=8080,debug=True)
    except KeyboardInterrupt:
        print("Scheduler stopped.")
        scheduler.shutdown() 
