import sys

import click

if sys.stdout.encoding and sys.stdout.encoding.lower() != "utf-8":
    sys.stdout.reconfigure(encoding="utf-8")

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}")


@app.cli.command("fix-data")
@click.option("--apply", "apply_changes", is_flag=True, help="اصلاحات واقعاً اعمال شوند (بدون این، فقط پیش‌نمایش).")
def fix_data(apply_changes):
    """اصلاح یک‌باره‌ی داده‌های وارد‌شده از اکسل: یکدست‌سازی شماره‌ها + گزارش موبایل‌های تکراری."""
    from app.services import data_cleanup
    data_cleanup.run(apply_changes, echo=click.echo)
