# retoor <retoor@molodetz.nl>

from devplacepy.utils import strip_html
from devplacepy.cli._shared import _audit_cli


def cmd_news_clear(args):
    from devplacepy.database import db

    deleted = {}
    for table in ("news", "news_images", "news_sync"):
        if table in db.tables:
            count = db[table].count()
            db[table].delete()
            deleted[table] = count
            print(f"Deleted {count} rows from '{table}'")
        else:
            print(f"Table '{table}' does not exist, skipping")
    _audit_cli("cli.news.clear", "CLI cleared all news data", metadata={"deleted": deleted})
    print("News data cleared")


def cmd_news_sanitize(args):
    from devplacepy.database import db

    if "news" not in db.tables:
        print("News table does not exist")
        return
    news_table = db["news"]
    updated = 0
    for row in news_table.all():
        desc = (strip_html(row.get("description", "") or ""))[:5000]
        content = (strip_html(row.get("content", "") or ""))[:10000]
        if desc != row.get("description", "") or content != row.get("content", ""):
            news_table.update(
                {"id": row["id"], "description": desc, "content": content}, ["id"]
            )
            updated += 1
    _audit_cli("cli.news.sanitize", f"CLI sanitized {updated} news articles", metadata={"count": updated})
    print(f"Sanitized {updated} news article(s)")


def register_news(subparsers):
    news = subparsers.add_parser("news", help="News management")
    news_sub = news.add_subparsers(title="action", dest="action")
    news_clear = news_sub.add_parser(
        "clear", help="Delete all news from local database"
    )
    news_clear.set_defaults(func=cmd_news_clear)
    news_sanitize = news_sub.add_parser(
        "sanitize", help="Strip HTML from all existing news descriptions and content"
    )
    news_sanitize.set_defaults(func=cmd_news_sanitize)
