""" service/words_service.py """

import logging

from flask import Flask
from flask import jsonify
from flask import request

from lib.logger import logset
from lib.utils import apply_handler
from lib.words import Words

app = Flask(__name__)

log = logset("WORDS")
log.propagate = False
log.info("Starting app 'WORDS'")

logging.basicConfig(level=10)

words_instance = Words(min_limit=3, max_limit=8)  # Create an instance with default limits

log.info("'WORDS' application is activated.")


@app.route("/find_permutations", methods=["POST"])
def find_permutations():
    """
    find valid permutations of a given string.
    Expects a JSON body: {"source_string": "example"}
    """
    data = request.get_json()
    if not data or "source_string" not in data:
        return jsonify({"error": "Invalid input. 'source_string' is required."}), 400

    source_string = data["source_string"]
    permutations = words_instance.find_permutations(source_string)
    return jsonify({"permutations": permutations})


@app.route("/set_limits", methods=["POST"])
def set_limits():
    """
    update min and max limits for permutations.
    Expects a JSON body: {"min_limit": 3, "max_limit": 8}
    """
    data = request.get_json()
    if not data:
        return jsonify({"error": "Invalid input. Limits are required."}), 400

    min_limit = data.get("min_limit", words_instance.min_limit)
    max_limit = data.get("max_limit", words_instance.max_limit)
    words_instance.min_limit = min_limit
    words_instance.max_limit = max_limit
    return jsonify({"message": "Limits updated successfully", "min_limit": min_limit, "max_limit": max_limit})


@app.route("/health", methods=["GET"])
def health_check():
    """
    Health-check endpoint to confirm the service is running.
    """
    return {"status": "words_service is running!"}, 200


apply_handler(app)  # Call this AFTER adding all the routes. It wraps all the routes with error handling & logging

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=3888)
