"""Flask API for Madaflix Translator Core."""

from __future__ import annotations

import os

from flask import Flask, jsonify, request

from translator_service import TranslationService, TranslationServiceError


def create_app() -> Flask:
    app = Flask(__name__)
    service = TranslationService()

    @app.get("/")
    def index():
        return jsonify(
            {
                "service": "madaflix-translator-api",
                "status": "ok",
                "mode": service.mode,
                "dependencies": {
                    "googletrans": False,
                    "deep-translator": False,
                    "flask": True,
                },
                "usage": {
                    "method": "POST",
                    "endpoint": "/translate",
                    "json": {
                        "text": "zah rery no ato antrano",
                        "target": "fr",
                    },
                },
            }
        )

    @app.get("/health")
    def health():
        return jsonify(
            {
                "status": "ok",
                "mode": service.mode,
            }
        )

    @app.post("/")
    @app.post("/translate")
    def translate():
        if not request.is_json:
            return jsonify(
                {
                    "error": "invalid_content_type",
                    "message": "Le Content-Type doit être application/json.",
                }
            ), 415

        payload = request.get_json(silent=True)

        if not isinstance(payload, dict):
            return jsonify(
                {
                    "error": "invalid_json",
                    "message": "Le corps JSON est invalide.",
                }
            ), 400

        text = payload.get("text")
        target = payload.get("target")

        if not isinstance(text, str) or not text.strip():
            return jsonify(
                {
                    "error": "invalid_text",
                    "message": "Le champ 'text' doit être une chaîne non vide.",
                }
            ), 400

        if not isinstance(target, str) or not target.strip():
            return jsonify(
                {
                    "error": "invalid_target",
                    "message": "Le champ 'target' est obligatoire (ex: 'en', 'fr').",
                }
            ), 400

        try:
            return jsonify(
                service.translate(
                    text=text,
                    target=target,
                )
            ), 200

        except TranslationServiceError as exc:
            return jsonify(
                {
                    "error": "translation_error",
                    "message": str(exc),
                }
            ), 502

        except Exception:
            app.logger.exception("Unexpected translation API error")
            return jsonify(
                {
                    "error": "internal_error",
                    "message": "Erreur interne du serveur.",
                }
            ), 500

    return app


app = create_app()


if __name__ == "__main__":
    app.run(
        host=os.getenv("HOST", "0.0.0.0"),
        port=int(os.getenv("PORT", "6163")),
        debug=os.getenv("FLASK_DEBUG", "0").lower() in {"1", "true", "yes"},
    )
