import argparse
import getpass
import os
import sys

from ovrapp import create_app
from ovrapp.extensions import db
from ovrapp.services import seed_reference_data


def main():
    parser = argparse.ArgumentParser(description="Al Wattan OVR administration")
    sub = parser.add_subparsers(dest="command", required=True)
    init = sub.add_parser("init-db", help="Create database tables and initial administrator")
    init.add_argument("--admin-username", default=os.getenv("INITIAL_ADMIN_USERNAME", "admin"))
    init.add_argument("--admin-email", default=os.getenv("INITIAL_ADMIN_EMAIL", ""))
    sub.add_parser("check", help="Verify application and database connectivity")

    args = parser.parse_args()
    app = create_app()
    with app.app_context():
        if args.command == "init-db":
            password = os.getenv("INITIAL_ADMIN_PASSWORD") or getpass.getpass("Initial administrator password: ")
            if len(password) < 12:
                print("Password must contain at least 12 characters.", file=sys.stderr)
                return 2
            db.create_all()
            admin = seed_reference_data(args.admin_username, args.admin_email, password)
            print(f"Database initialized. Administrator: {admin.username if admin else args.admin_username}")
        elif args.command == "check":
            db.session.execute(db.select(1))
            print("Application import and database connectivity: OK")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
