#!/usr/bin/env python3
"""Migra style.css e keepedu-theme.css para módulos em web/static/css/."""

from __future__ import annotations

import re
from pathlib import Path

ROOT = Path(__file__).resolve().parents[1]
CSS = ROOT / "web" / "static" / "css"

DEAD_PATTERNS = [
    r"\.hero-correcao[^{]*\{[^}]*\}",
    r"\.hero-correcao-shell[^{]*\{[^}]*\}",
    r"\.correcao-toolbar-card[^{]*\{[^}]*\}",
    r"\.correcao-hero[^{]*\{[^}]*\}",
    r"\.home-history-item\s*\{\s*background-color:\s*red\s*!important;\s*\}",
]

STYLE_SECTIONS: list[tuple[str, str]] = [
    ("layout/_topbar.css", "/* PAGE */"),
    ("components/_hero.css", "/* CARDS */"),
    ("components/_cards.css", "/* FORMS */"),
    ("components/_forms.css", "/* BUTTONS */"),
    ("components/_buttons-legacy.css", "/* INDEX */"),
    ("pages/_home-legacy.css", "/* PROCESSAMENTO */"),
    ("pages/_processamento-legacy.css", "/* CORREÇÃO */"),
    ("pages/_correcao-legacy.css", "/* RESPONSIVO */"),
    ("layout/_responsive-legacy.css", "/* PROJECT-WIDE PREMIUM OVERRIDES */"),
    ("theme/_premium.css", "/* FINAL POLISH */"),
    ("theme/_polish.css", "/* UI REFRESH 2026 */"),
    ("theme/_refresh.css", "/* BERNOULLI */"),
    ("pages/_bernoulli-legacy.css", "/* HOME REDESIGN */"),
    ("pages/_home-redesign-legacy.css", "/* SIDEBAR REFINO */"),
    ("layout/_sidebar-legacy.css", "/* PREMIUM FINISH */"),
    ("theme/_finish.css", "/* RESPONSIVO EXTRA */"),
    ("layout/_responsive-extra.css", "/* SYSTEM OVERHAUL 2026 */"),
    ("theme/_overhaul.css", "/* ========================="),
]

KEEPEDU_SECTIONS: list[tuple[str, int]] = [
    ("theme/_shell.css", 482),
    ("theme/_cards.css", 1580),
    ("theme/_sidebar-text.css", 1614),
    ("theme/_sidebar-nav.css", 1863),
    ("components/_toolbar.css", 1947),
    ("theme/_event-log.css", 2140),
    ("theme/_modals-shared.css", 2262),
    ("theme/_imagens.css", 2373),
    ("pages/_historico.css", 2827),
    ("pages/_validacao.css", 2850),
    ("pages/_kanban.css", 2907),
    ("components/_select-busca.css", 2995),
    ("components/_select-multi.css", 3213),
]


def strip_dead_css(text: str) -> str:
    for pattern in DEAD_PATTERNS:
        text = re.sub(pattern, "", text, flags=re.DOTALL)
    return re.sub(r"\n{3,}", "\n\n", text)


def split_by_markers(content: str, markers: list[str]) -> list[str]:
    positions: list[tuple[int, str]] = []
    for marker in markers:
        idx = content.find(marker)
        if idx >= 0:
            positions.append((idx, marker))
    positions.sort(key=lambda x: x[0])

    if not positions:
        return [content]

    chunks: list[str] = []
    if positions[0][0] > 0:
        chunks.append(content[: positions[0][0]])

    for i, (start, _) in enumerate(positions):
        end = positions[i + 1][0] if i + 1 < len(positions) else len(content)
        chunks.append(content[start:end])

    return chunks


def migrate_style() -> None:
    source = (CSS / "style.css").read_text(encoding="utf-8")
    markers = [m for _, m in STYLE_SECTIONS]
    chunks = split_by_markers(source, markers)

    preamble = chunks[0] if chunks else ""
    body_chunks = chunks[1:] if len(chunks) > 1 else []

    if preamble.strip():
        out = CSS / "components" / "_toast.css"
        out.parent.mkdir(parents=True, exist_ok=True)
        out.write_text(strip_dead_css(preamble.strip() + "\n"), encoding="utf-8")

    for i, (filename, _) in enumerate(STYLE_SECTIONS):
        if i >= len(body_chunks):
            break
        chunk = strip_dead_css(body_chunks[i].strip())
        if not chunk:
            continue
        path = CSS / filename
        path.parent.mkdir(parents=True, exist_ok=True)
        header = f"/* Migrado de style.css — {filename} */\n\n"
        path.write_text(header + chunk + "\n", encoding="utf-8")


def migrate_keepedu() -> None:
    source = (CSS / "keepedu-theme.css").read_text(encoding="utf-8")
    lines = source.splitlines(keepends=True)

    cuts = [0] + [line - 1 for _, line in KEEPEDU_SECTIONS]
    cuts.append(len(lines))

    shell = "".join(lines[: cuts[1]])
    path = CSS / "theme" / "_shell-base.css"
    path.parent.mkdir(parents=True, exist_ok=True)
    path.write_text(strip_dead_css(shell.strip() + "\n"), encoding="utf-8")

    for i, (filename, _) in enumerate(KEEPEDU_SECTIONS):
        start = cuts[i + 1]
        end = cuts[i + 2]
        chunk = "".join(lines[start:end]).strip()
        if not chunk:
            continue
        out = CSS / filename
        out.parent.mkdir(parents=True, exist_ok=True)
        header = f"/* Migrado de keepedu-theme.css — {filename} */\n\n"
        out.write_text(header + strip_dead_css(chunk) + "\n", encoding="utf-8")

    misc_start = cuts[-1]
    misc = "".join(lines[misc_start:]).strip()
    if misc:
        out = CSS / "theme" / "_misc.css"
        out.write_text(
            f"/* Migrado de keepedu-theme.css — theme/_misc.css */\n\n{strip_dead_css(misc)}\n",
            encoding="utf-8",
        )


def consolidate_variables() -> None:
    src = (CSS / "_variables.css").read_text(encoding="utf-8")
    blocks = re.findall(r":root\s*\{[^}]*\}", src, flags=re.DOTALL)
    merged: dict[str, str] = {}
    for block in blocks:
        for line in block.splitlines():
            line = line.strip()
            if not line or line.startswith(":root") or line == "}":
                continue
            if ":" in line:
                key = line.split(":", 1)[0].strip()
                merged[key] = line

    lines = [":root {"]
    lines.extend(f"    {merged[k]}" for k in sorted(merged))
    lines.append("}")
    out = CSS / "tokens" / "_variables.css"
    out.parent.mkdir(parents=True, exist_ok=True)
    out.write_text("\n".join(lines) + "\n", encoding="utf-8")


def clean_components() -> None:
    path = CSS / "_components.css"
    if not path.exists():
        return
    text = path.read_text(encoding="utf-8")
    text = strip_dead_css(text)
    text = re.sub(
        r"\.home-history-item\s*\{\s*background-color:\s*red\s*!important;\s*\}\n?",
        "",
        text,
    )
    path.write_text(text, encoding="utf-8")


def write_main_css() -> None:
    imports = [
        "/* OMRCheck Web — CSS modular */",
        "",
        "/* 1. Tokens */",
        "@import 'tokens/_variables.css';",
        "",
        "/* 2. Base */",
        "@import 'base.css';",
        "@import 'components/_toast.css';",
        "",
        "/* 3. Layout */",
        "@import '_layout.css';",
        "@import 'layout/_topbar.css';",
        "@import 'layout/_sidebar-legacy.css';",
        "@import 'layout/_responsive-legacy.css';",
        "@import 'layout/_responsive-extra.css';",
        "",
        "/* 4. Componentes genéricos */",
        "@import '_components.css';",
        "@import 'components/_hero.css';",
        "@import 'components/_cards.css';",
        "@import 'components/_forms.css';",
        "@import 'components/_buttons-legacy.css';",
        "@import 'components/_toolbar.css';",
        "@import 'components/_select-busca.css';",
        "@import 'components/_select-multi.css';",
        "",
        "/* 5. Tema KeepEdu */",
        "@import 'theme/_shell-base.css';",
        "@import 'theme/_shell.css';",
        "@import 'theme/_cards.css';",
        "@import 'theme/_sidebar-text.css';",
        "@import 'theme/_sidebar-nav.css';",
        "@import 'theme/_event-log.css';",
        "@import 'theme/_modals-shared.css';",
        "@import 'theme/_imagens.css';",
        "@import 'theme/_misc.css';",
        "@import 'theme/_premium.css';",
        "@import 'theme/_polish.css';",
        "@import 'theme/_refresh.css';",
        "@import 'theme/_finish.css';",
        "@import 'theme/_overhaul.css';",
        "",
        "/* 6. Páginas */",
        "@import 'pages/_symmetry.css';",
        "@import 'pages/_painel.css';",
        "@import 'pages/_home-legacy.css';",
        "@import 'pages/_home-redesign-legacy.css';",
        "@import 'pages/_processamento-legacy.css';",
        "@import 'pages/_correcao-legacy.css';",
        "@import 'pages/_correcao.css';",
        "@import 'pages/_bernoulli-legacy.css';",
        "@import 'pages/_validacao.css';",
        "@import 'pages/_historico.css';",
        "@import 'pages/_kanban.css';",
        "",
        "/* 7. Botões refinados */",
        "@import 'components/_buttons.css';",
        "",
        "/* 8. Responsivo e utilitários */",
        "@import 'pages/_responsive.css';",
        "@import '_utilities.css';",
        "",
        "/* Login */",
        ".ke-password-wrapper { position: relative; }",
        ".ke-password-wrapper input { padding-right: 50px; }",
        ".ke-password-toggle {",
        "    position: absolute;",
        "    right: 12px;",
        "    top: 50%;",
        "    transform: translateY(-50%);",
        "    border: none;",
        "    background: transparent;",
        "    cursor: pointer;",
        "    padding: 0;",
        "    color: #64748b;",
        "    display: flex;",
        "    align-items: center;",
        "    justify-content: center;",
        "}",
        ".ke-password-toggle:hover { color: #334155; }",
    ]
    (CSS / "main.css").write_text("\n".join(imports) + "\n", encoding="utf-8")


def archive_monoliths() -> None:
    archive = CSS / "_archive"
    archive.mkdir(exist_ok=True)
    for name in ("style.css", "keepedu-theme.css", "_variables.css"):
        src = CSS / name
        if src.exists():
            dest = archive / name
            dest.write_text(src.read_text(encoding="utf-8"), encoding="utf-8")
            src.unlink()


def main() -> None:
    consolidate_variables()
    clean_components()
    migrate_style()
    migrate_keepedu()
    write_main_css()
    archive_monoliths()
    print("Migração CSS concluída.")
    print(f"Arquivos em: {CSS}")
    print(f"Backup em: {CSS / '_archive'}")


if __name__ == "__main__":
    main()
