import sys

import click

if sys.stdout.encoding and sys.stdout.encoding.lower() != "utf-8":
    sys.stdout.reconfigure(encoding="utf-8")  # کنسول ویندوز پیش‌فرض cp1252 است و متن فارسی را نمی‌تواند چاپ کند

from app import create_app
from app.extensions import db

app = create_app()


@app.cli.command("seed-db")
def seed_db():
    """دیتای پیش‌فرض (تگ‌ها + تنظیمات + ادمین اولیه) را می‌سازد."""
    from scripts.seed import run_all
    run_all()


@app.cli.command("create-admin")
@click.option("--username", prompt=True)
@click.option("--full-name", prompt="Full name")
def create_admin(username, full_name):
    """یک کاربر ادمین جدید با رمز تصادفی می‌سازد."""
    import secrets
    from app.models.user import User, Permission
    from config import PAGE_PERMISSIONS

    if User.query.filter_by(username=username).first():
        click.echo("این نام کاربری قبلاً استفاده شده.")
        return
    password = secrets.token_urlsafe(12)
    user = User(username=username, full_name=full_name, role="admin", is_active_flag=True)
    user.set_password(password)
    db.session.add(user)
    db.session.flush()
    for key, _label in PAGE_PERMISSIONS:
        db.session.add(Permission(user_id=user.id, page_key=key))
    db.session.commit()
    click.echo(f"ساخته شد. نام کاربری: {username} | رمز عبور: {password}")
