from datetime import datetime, timezone
from xml.sax.saxutils import escape

from flask import Blueprint, Response, current_app, request

seo_bp = Blueprint("seo", __name__)

_SITEMAP_ENTRIES = (
    ("/", "1.0", "weekly"),
    ("/over-ons", "0.8", "monthly"),
    ("/team", "0.8", "monthly"),
    ("/map", "0.7", "weekly"),
    ("/privacy", "0.4", "yearly"),
    ("/discord", "0.4", "yearly"),
    ("/cookies", "0.4", "yearly"),
    ("/voorwaarden", "0.4", "yearly"),
)


def _site_base_url() -> str:
    return "https://valorrealms.nl"

@seo_bp.route("/robots.txt")
def robots_txt():
    base = _site_base_url()
    sitemap_url = f"{base}/sitemap.xml"
    body = (
        "User-agent: *\n"
        "Allow: /\n"
        "Disallow: /webhook/\n"
        "\n"
        f"Sitemap: {sitemap_url}\n"
    )
    return Response(body, mimetype="text/plain; charset=utf-8")


@seo_bp.route("/sitemap.xml")
def sitemap_xml():
    base = _site_base_url()
    lastmod = datetime.now(timezone.utc).date().isoformat()
    lines = [
        '<?xml version="1.0" encoding="UTF-8"?>',
        '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">',
    ]
    for path, priority, changefreq in _SITEMAP_ENTRIES:
        loc = f"{base}{path}" if path != "/" else f"{base}/"
        lines.append("  <url>")
        lines.append(f"    <loc>{escape(loc)}</loc>")
        lines.append(f"    <lastmod>{lastmod}</lastmod>")
        lines.append(f"    <changefreq>{changefreq}</changefreq>")
        lines.append(f"    <priority>{priority}</priority>")
        lines.append("  </url>")
    lines.append("</urlset>")
    xml = "\n".join(lines) + "\n"
    return Response(xml, mimetype="application/xml; charset=utf-8")


@seo_bp.route("/llms.txt")
def llms_txt():
    base = _site_base_url()
    body = (
        "# Valor Realms\n"
        "\n"
        "> Nederlandse Minecraft Kingdom server: speel, bouw en beleef samen met de community.\n"
        "\n"
        "## Belangrijkste pagina's\n"
        "\n"
        f"- [Home]({base}/)\n"
        f"- [Over ons]({base}/over-ons)\n"
        f"- [Team]({base}/team)\n"
        f"- [Dynmap]({base}/map)\n"
        "\n"
        "## Juridisch & info\n"
        "\n"
        f"- [Privacyverklaring]({base}/privacy)\n"
        f"- [Cookiebeleid]({base}/cookies)\n"
        f"- [Algemene voorwaarden]({base}/voorwaarden)\n"
        "\n"
        "## Extern\n"
        "\n"
        f"- [Discord]({base}/discord)\n"
        "- [Winkel](https://store.valorrealms.nl)\n"
    )
    return Response(body, mimetype="text/markdown; charset=utf-8")
