from flask import Flask,  jsonify, request as req
from flask_httpauth import HTTPBasicAuth
from flask_cors import CORS
from recon_engine import Recon_Engine
from decouple import config
import logging
import traceback
import requests

logging.basicConfig(filename='recon_engine_connector.log', format='%(asctime)s - %(levelname)s - %(message)s', datefmt="%Y-%m-%d %H:%M:%S", level=logging.INFO)


app = Flask(__name__)
CORS(app)
#Talisman(app)
auth = HTTPBasicAuth()
recon_engine = Recon_Engine()

@app.route('/', methods=['GET'])
def recon_engine_connector_get():
    return "Recon Engine Connector", 200

@auth.verify_password
def verify_password(username, password):
    if username == config("AUTH_USERNAME") and password == config("AUTH_PWD"): 
        return True
    else:
        return False


@app.route('/recon-engine', methods=['POST'])
@auth.login_required
def recon_post():
    # check campo sheet_id esistente
    if req.is_json and req.get_json() is not None and "sheet_id" in req.get_json():
        try:
            recon_engine.run_recon_engine2(req.get_json()["sheet_id"])
        except Exception as e:
            logging.exception("Error during audit process", exc_info=True)
            if(type(e) == "requests.exceptions.RequestException"):
                return jsonify(status="Error", message="Http exception"), 500
            else: 
                return traceback.format_exc(), 500
        else:
            return jsonify(status="Success", message="Recon succesfully calculated"), 200
    else:
        return jsonify(status="Error", message="Payload is not a valid JSON or required field/s missing"), 500