"""Home blueprint — auth redirect + designations."""
import json, logging, os
from flask import Blueprint, jsonify, redirect, request, session, url_for
import extensions as ext
from helpers import _display_name_from_email
from services.user_service import get_jwt_token, get_user_company_data, start_authenticated_user_bootstrap

logger = logging.getLogger("apex")
home_bp = Blueprint("home", __name__)
_REDIS_EXPIRY = int(os.getenv("REDIS_EXPIRY", "86400"))

@home_bp.route("/")
def index():
    if "user" not in session:
        return redirect(url_for("auth.login"))
    return redirect("/dashboard")

@home_bp.route("/save_source", methods=["POST"])
def save_source():
    email = session.get("user")
    if not email: return jsonify({"error": "Unauthenticated"}), 401
    data = request.get_json(silent=True) or {}
    ext.redis_client.set(f"src:{email}", json.dumps(data))
    return jsonify({"status": "saved"})

@home_bp.route("/get_designations")
def get_designations():
    email = session.get("user")
    if not email: return jsonify({"status": "error", "designations": []})
    try:
        user_data = ext.redis_client.get(email)
        if not user_data:
            jwt_token = get_jwt_token(email)
            user_data_dict = get_user_company_data(email, jwt_token=jwt_token)
            ext.redis_client.set(email, json.dumps(user_data_dict), ex=_REDIS_EXPIRY)
            designations = user_data_dict.get("DESIGNATIONNAME", [])
        else:
            parsed = json.loads(user_data if isinstance(user_data, str) else user_data.decode())
            designations = parsed.get("DESIGNATIONNAME", [])
        return jsonify({"status": "success", "designations": designations})
    except Exception as exc:
        logger.error("[Designations] Failed for %s: %s", email, exc)
        return jsonify({"status": "error", "message": str(exc)})