import os
from flask import Flask, request, redirect, url_for, render_template, jsonify, send_from_directory
from werkzeug.utils import secure_filename
import logging
from main import ReportWriter

UPLOAD_FOLDER = '/home/ubuntu/flask/files'
log_directory = "/home/ubuntu/flask/logs"
if not os.path.exists(log_directory):
    os.makedirs(log_directory)

logging.basicConfig(filename=os.path.join(log_directory, 'flask.log'), level=logging.DEBUG)
psych = Flask(__name__)
psych.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
psych.logger.info('Starting up')

# try:
#     psych.logger.info("Attempting to import wais.py")
# #    import wais
#     psych.logger.info("Imported wais.py successfully")
# except Exception as e:
#     psych.logger.error("Failed to import wais.py:", exc_info=True)

# def allowed_file(filename):
#     return '.' in filename and \
#            filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

@psych.route('/', methods=['GET', 'POST'])
def upload_file():
    return render_template('upload.html')

@psych.route('/uploader', methods=['POST'])
def upload_files():
    psych.logger.warning('Uploading')
    psych.logger.warning(request.files)
    psych.logger.warning(request.form)
    deleteFiles = ReportWriter().delete_docx_files("/home/ubuntu/flask/files", ["template.docx", "ADHD.docx"])
    for key in request.files:
        file = request.files[key]
        #psych.logger.warning('Starting ', file)
        if file:
            # Extract the extension and prepare the new filename
            ext = file.filename.rsplit('.', 1)[1].lower()
            filename = secure_filename(f"{key}.{ext}")
            save_path = os.path.join(psych.config['UPLOAD_FOLDER'], filename)
            file.save(save_path)
    psych.logger.warning('Done with uploading')
    psych.logger.warning('Attempting to assemble the report')
    ReportWriter().start(os.path.join('/home/ubuntu/flask/files/', request.values['report_title'] + '.docx'), request.values['patient_name'], request.values['pronouns'])
    psych.logger.warning('Report assembled')
    psych.logger.warning('Attempting download')
    reportName = os.path.join(request.values['report_title'] + '.docx')
    return redirect(url_for('download_file', filename=reportName))

@psych.route('/report')
def report(reportFile, templateFile = "", bascFile = [], wiscFile = "", woodcockFile = ""):
    ReportWriter().start(reportFile)
    return 'ReportWriter started'

@psych.route('/download/<filename>')
def download_file(filename):
    psych.logger.warning('Downloading file: ' + filename)
    psych.logger.warning(filename)
    return send_from_directory(psych.config['UPLOAD_FOLDER'],
                               filename, as_attachment=True)

@psych.route('/howdy')
def testing():

    return "Done"

if __name__ == '__main__':
    psych.run(host='0.0.0.0', debug=True, port=5000)
