"""python -m app.cli create-owner  (asks for the password so it never sits in a command line)"""
import getpass
import sys

from sqlalchemy import select

from . import security
from .db import Base, SessionLocal, engine
from .models import User
from .seed import seed_base


def create_owner():
    Base.metadata.create_all(engine)
    email = input("Owner email: ").strip().lower()
    name = input("Owner name: ").strip() or "Store Owner"
    pw = getpass.getpass("Password (8+ characters, mixed case, a number): ")
    if pw != getpass.getpass("Type it again: "):
        sys.exit("The two passwords did not match.")
    problem = security.password_problem(pw)
    if problem:
        sys.exit(problem)
    with SessionLocal() as db:
        seed_base(db)
        if db.scalar(select(User.id).where(User.email == email)):
            sys.exit("That email already has an account.")
        db.add(User(email=email, name=name, role="owner", password_hash=security.hash_password(pw)))
        db.commit()
    print("Owner created. You can sign in at /owner.")


if __name__ == "__main__":
    if sys.argv[1:] == ["create-owner"]:
        create_owner()
    else:
        sys.exit("Usage: python -m app.cli create-owner")
