# -*- coding: utf-8 -*-
"""Sobakeyfi site üretici — tüm sayfaları oluşturur: index, x.txt, cadir.txt, şehir, ekipman, statik."""
import sys
import io
import time

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8", errors="replace")

from sitegen_common import ROOT, DOMAIN, TEL_1, esc, render_page
from sitegen_util import SITEMAP, reg, fener_gallery, cta_band
from sitegen_index import build_index
from sitegen_pages import build_cat_landings, build_service_pages, build_x_pages, build_cadir_pages
from sitegen_city import build_city_pages, build_kabin_pages, build_ekipman
from sitegen_static import build_galeri_hub, build_static_pages
from sitegen_pages import page_hero_local

T0 = time.time()


def step(label, fn):
    n0 = len(SITEMAP)
    t0 = time.time()
    try:
        fn()
        print(f"[OK] {label}: {len(SITEMAP) - n0} sayfa · {time.time() - t0:.1f}s")
    except Exception as e:
        import traceback
        traceback.print_exc()
        print(f"[HATA] {label}: {e}")
        raise


def build_site_haritasi():
    groups = {}
    for fname, pri, freq in SITEMAP:
        if fname in ("index.html", "404.html"):
            continue
        key = ("Şehirler" if "-isitici-soba-satisi-" in fname or fname.endswith("-soba-satisi-kiralama-tamiri.htm")
               else "Çadır & Ekipman" if ("cadir" in fname or "gazebo" in fname or "ekipman" in fname
                                          or "semsiye" in fname or "kabin" in fname or "wc" in fname)
               else "Hizmetler" if fname.startswith("hizmet-")
               else "Galeri" if fname.startswith("galeri-")
               else "Kurumsal" if fname in ("hakkimizda.html", "iletisim.html", "sss.html",
                                            "gizlilik-kvkk.html", "sehirler.htm")
               else "Soba Modelleri")
        groups.setdefault(key, []).append(fname)

    order = ["Soba Modelleri", "Hizmetler", "Çadır & Ekipman", "Şehirler", "Galeri", "Kurumsal"]
    cols = []
    for key in order:
        items = groups.get(key)
        if not items:
            continue
        links = "".join(f'<a href="{esc(f)}">{esc(f)}</a>' for f in items)
        cols.append(f'<div class="side-box" style="height:auto"><h3><i>🗂</i> {esc(key)} '
                    f'<small style="color:var(--txt-faint)">({len(items)})</small></h3>'
                    f'<div class="side-links">{links}</div></div>')

    body = f"""
<div class="container">
{page_hero_local("Navigasyon", "Site Haritası", [f"{len(SITEMAP)} Sayfa", "Tüm Bağlantılar"])}
<div style="display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:18px">
{"".join(cols)}
</div>
</div>
<section class="section alt"><div class="container">{fener_gallery(99)}</div></section>
{cta_band("Aradığınızı bulamadınız mı?", "Tüm bağlantılar yukarıda; bize de yazabilirsiniz.")}
"""
    html = render_page(filename="site-haritasi.html", title="Site Haritası | Sobakeyfi",
                       meta_desc=f"Sobakeyfi site haritası — {len(SITEMAP)} sayfanın tamamı.",
                       meta_kw="site haritası, sobakeyfi bağlantılar", body=body,
                       crumbs=[("Ana Sayfa", "index.html"), ("Site Haritası", "site-haritasi.html")],
                       jsonld=[], active="")
    (ROOT / "site-haritasi.html").write_text(html, encoding="utf-8")
    reg("site-haritasi.html", "0.6")


def build_robots():
    txt = f"""User-agent: *
Allow: /
Disallow: /404.html

User-agent: GPTBot
Allow: /

Sitemap: {DOMAIN}/sitemap.xml
"""
    (ROOT / "robots.txt").write_text(txt, encoding="utf-8")
    print("[OK] robots.txt")


def build_sitemap():
    urls = []
    for fname, pri, freq in SITEMAP:
        if fname == "404.html":
            continue
        urls.append(
            f"  <url>\n"
            f"    <loc>{DOMAIN}/{esc(fname)}</loc>\n"
            f"    <changefreq>{freq}</changefreq>\n"
            f"    <priority>{pri}</priority>\n"
            f"  </url>"
        )
    xml = ('<?xml version="1.0" encoding="UTF-8"?>\n'
           '<urlset xmlns="http://www.w3.org/1999/sitemaps/0.9">\n'
           + "\n".join(urls) + "\n</urlset>\n")
    (ROOT / "sitemap.xml").write_text(xml, encoding="utf-8")
    print(f"[OK] sitemap.xml: {len(urls)} URL")


def main():
    print("=" * 60)
    print("SOBAKEYFİ — site üretimi başlıyor")
    print("=" * 60)

    step("ana sayfa", build_index)
    step("kategori landing", build_cat_landings)
    step("hizmet sayfaları", build_service_pages)
    step("x.txt (226)", build_x_pages)
    step("cadir.txt (142)", build_cadir_pages)
    step("şehir + ilçe", build_city_pages)
    step("kabin / WC", build_kabin_pages)
    step("ekipman", build_ekipman)
    step("galeri", build_galeri_hub)
    step("statik", build_static_pages)
    step("site haritası", build_site_haritasi)

    build_robots()
    build_sitemap()

    print("=" * 60)
    print(f"TOPLAM: {len(SITEMAP)} sayfa · {time.time() - T0:.1f} saniye")
    print("=" * 60)


if __name__ == "__main__":
    main()
