""" routes/index.py """

import json

import requests
from flask import jsonify
from flask import render_template
from flask import request
from flask import session

import service
from lib.logger import logset

log = logset(__name__)


def add_routes(app):
    app.add_url_rule("/", "home", home)
    app.add_url_rule("/example", "example", example)
    app.add_url_rule("/find_words", "find_words", find_words, methods=["GET"])
    app.add_url_rule("/get_permutations", "get_permutations", get_permutations, methods=["POST"])
    app.add_url_rule("/user_info", "user_info", user_info)
    app.add_url_rule("/save_browser_info", "browser_info", browser_info, methods=["POST"])


# @login_required
def find_words():
    # words_instance.init_data()
    return render_template("find_words.html", session=session.get("user"))


def get_permutations():
    """handle the AJAX POST request"""

    if request.headers.get("X-Requested-With") != "XMLHttpRequest":
        log.error("Not a XMLHttpRequest request")
        return jsonify([])

    if not service.ServiceReady().ready:
        log.error("Service is not ready yet")
        return jsonify({"status": "busy", "message": "initializing. Please try again later."}), 503

    source_word = request.form.get("source_word", "")
    if not source_word:
        log.error("No source word")
        return jsonify([])

    # Make a POST request to the external /find_permutations endpoint
    url = f"{service.WORDS_SVC_URL}/find_permutations"
    log.info(f"Requesting the word service @ {url}")
    response = requests.post(url, json={"source_string": source_word}, timeout=30)

    # Check if the request was successful
    if response.status_code != 200:
        log.info(f"Word Service request failed")
        return jsonify({"error": "Error communicating with permutation service."}), response.status_code

    data = response.json()
    if "permutations" in data:
        result_list = [[word, freq] for word, freq in data["permutations"]]
        return jsonify(result_list)

    log.error("No Permutations in data")
    return jsonify([])


def home():
    return render_template("home.html", session=session.get("user"))


# @login_required
def user_info():
    return render_template(
        "user_info.html",
        session=session.get("user"),
        pretty=json.dumps(session.get("user"), indent=4),
    )


# @login_required
def example():
    return render_template("example.html", session=session.get("user"))


# @login_required
def browser_info():
    log.info("browser_info()")
    data = request.json
    log.info(data)
    return "Success"
