from flask import Blueprint, jsonify
from models.homepage import Homepage

homepage_bp = Blueprint("homepage_bp", __name__)  # register in app.py


def _homepage_to_dict(doc: Homepage):
    if not doc:
        return None
    return {
        "page_title": doc.page_title,
        "page_slug": doc.page_slug,
        "page_content": doc.page_content,
        "page_video": doc.page_video,
        "title": doc.title,
        "meta_description": doc.meta_description,
    }


#  - /homepage             -> combined Home + About-Us response
#  - /homepage/<slug>      -> fetch from collection by page_slug
@homepage_bp.route("/homepage", defaults={"slug": None}, methods=["GET"])
@homepage_bp.route("/homepage/<path:slug>", methods=["GET"])
def get_homepage(slug):
    """
    GET /homepage
    GET /homepage/<slug>

    - If slug is NOT provided:
        * Get page_slug="home"   -> use page_title, page_slug, title, meta_description
        * Get page_slug="about-us" -> use page_content, page_video
        * Combine into one response.
    - If slug IS provided:
        * Fetch document where page_slug == slug and return it.
    """

    # -------- Case 1: No slug -> combined Home + About Us --------
    if not slug:
        home_doc = Homepage.objects(page_slug="home").first()
        about_doc = Homepage.objects(page_slug="about-us").first()

        # Build combined response
        combined = {
            # From page_slug = "home"
            "page_title": home_doc.page_title if home_doc else "Home Page",
            "page_slug": home_doc.page_slug if home_doc else "home",
            "title": home_doc.title if home_doc else "EduRuby - Online Learning Platform",
            "meta_description": (
                home_doc.meta_description if home_doc else None
            ),

            # From page_slug = "about-us"
            "page_content": about_doc.page_content if about_doc else None,
            "page_video": about_doc.page_video if about_doc else None,
        }

        return jsonify({
            "status": True,
            "message": "Home page (combined) fetched successfully.",
            "data": combined
        }), 200

    # -------- Case 2: Slug is provided -> fetch from collection --------
    normalized_slug = slug.lstrip("/")   # in case someone hits /homepage//about-us

    doc = Homepage.objects(page_slug=normalized_slug).first()

    if not doc:
        return jsonify({
            "status": False,
            "message": f"No page found for slug '{normalized_slug}'.",
            "data": None
        }), 404

    return jsonify({
        "status": True,
        "message": "Page fetched successfully.",
        "data": _homepage_to_dict(doc)
    }), 200
