"""Management script for admin tasks."""
import sys
from app import create_app
from app.extensions import db
from app.models.user import User
from app.models.subscription import Plan, Subscription


app = create_app()


def upgrade_user_plan(email, plan_name):
    """Upgrade a user's subscription to a specific plan."""
    with app.app_context():
        user = User.query.filter_by(email=email).first()
        if not user:
            print(f"ERROR: User '{email}' not found.")
            return False

        plan = Plan.query.filter_by(name=plan_name).first()
        if not plan:
            # Create Empire plan if it doesn't exist
            if plan_name == "empire":
                plan = Plan(
                    name="empire", display_name="Empire",
                    reports_per_month=-1, price_monthly=299,
                    can_export_pdf=True, has_api_access=True,
                )
                db.session.add(plan)
                db.session.commit()
                print(f"Created Empire plan (id={plan.id})")
            else:
                print(f"ERROR: Plan '{plan_name}' not found.")
                return False

        sub = Subscription.query.filter_by(user_id=user.id).first()
        if sub:
            sub.plan_id = plan.id
            sub.status = "active"
        else:
            sub = Subscription(user_id=user.id, plan_id=plan.id, status="active")
            db.session.add(sub)
        db.session.commit()
        print(f"SUCCESS: {email} upgraded to {plan.display_name} plan.")
        return True


def make_super_admin(email):
    """Grant super admin privileges to a user."""
    with app.app_context():
        user = User.query.filter_by(email=email).first()
        if not user:
            print(f"ERROR: User '{email}' not found.")
            return False
        user.is_admin = True
        db.session.commit()
        print(f"SUCCESS: {email} is now a Super Admin.")
        return True


def create_admin_user(email, name, password):
    """Create a new super admin user."""
    with app.app_context():
        existing = User.query.filter_by(email=email).first()
        if existing:
            existing.is_admin = True
            db.session.commit()
            print(f"User {email} already exists. Granted admin privileges.")
            return True
        user = User(email=email, name=name, is_admin=True, email_verified=True)
        user.set_password(password)
        db.session.add(user)
        db.session.commit()
        print(f"SUCCESS: Created super admin user {email} (id={user.id})")
        return True


if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Usage:")
        print("  python manage.py upgrade-plan <email> <plan_name>")
        print("  python manage.py make-admin <email>")
        print("  python manage.py create-admin <email> <name> <password>")
        sys.exit(1)

    cmd = sys.argv[1]

    if cmd == "upgrade-plan" and len(sys.argv) >= 4:
        upgrade_user_plan(sys.argv[2], sys.argv[3])
    elif cmd == "make-admin" and len(sys.argv) >= 3:
        make_super_admin(sys.argv[2])
    elif cmd == "create-admin" and len(sys.argv) >= 5:
        create_admin_user(sys.argv[2], sys.argv[3], sys.argv[4])
    else:
        print("Invalid command or missing arguments.")
        sys.exit(1)
