import hmac
import os

from flask import Blueprint, jsonify, request

from app.services.prepare import prepare_article

prepare_bp = Blueprint("prepare", __name__)


def _gate():
    expected = os.environ.get("NEWS_API_KEY", "")
    if not expected:
        return jsonify(success=False, error="missing_key"), 500
    header = request.headers.get("Authorization", "")
    if not header.startswith("Bearer "):
        return jsonify(success=False, error="unauthorized"), 401
    got = header[7:]
    if len(got) != len(expected) or not hmac.compare_digest(got, expected):
        return jsonify(success=False, error="forbidden"), 403
    return None


@prepare_bp.post("/api/v1/news/prepare")
def prepare():
    denied = _gate()
    if denied:
        return denied
    payload = request.get_json(silent=True) or {}
    title = str(payload.get("title") or "")[:180]
    deck = str(payload.get("deck") or "")[:500]
    text = str(payload.get("text") or "")[:20000]
    return jsonify(success=True, **prepare_article(title, deck, text))
