"""
One-time fix: set voicebot password to 'vmc' and create database voicebot.
Run from backend folder: python scripts/fix_voicebot_db.py
You will be prompted for the POSTGRES user password (the one you set when installing PostgreSQL).
"""
import os
import subprocess
import sys

PSQL = r"C:\Program Files\PostgreSQL\18\bin\psql.exe"
for ver in (18, 17, 16, 15):
    p = rf"C:\Program Files\PostgreSQL\{ver}\bin\psql.exe"
    if os.path.isfile(p):
        PSQL = p
        break

def run_psql(password: str, sql: str) -> bool:
    env = os.environ.copy()
    env["PGPASSWORD"] = password
    r = subprocess.run(
        [PSQL, "-U", "postgres", "-h", "localhost", "-c", sql],
        env=env,
        capture_output=True,
        text=True,
    )
    if r.returncode != 0:
        print(r.stderr or r.stdout)
        return False
    return True

def main():
    print("This will set user 'voicebot' password to 'vmc' and create database 'voicebot'.")
    print("You need the POSTGRES superuser password (from PostgreSQL installation).")
    try:
        import getpass
        postgres_pass = getpass.getpass("Enter postgres user password: ")
    except Exception:
        postgres_pass = input("Enter postgres user password: ")

    if not postgres_pass:
        print("No password entered. Exiting.")
        sys.exit(1)

    print("Setting voicebot password...")
    if not run_psql(postgres_pass, "ALTER USER voicebot WITH PASSWORD 'vmc';"):
        print("Trying CREATE USER voicebot (in case user does not exist)...")
        if not run_psql(postgres_pass, "CREATE USER voicebot WITH PASSWORD 'vmc';"):
            print("Failed. Check the error above.")
            sys.exit(1)

    print("Creating database voicebot...")
    if not run_psql(postgres_pass, "CREATE DATABASE voicebot OWNER voicebot;"):
        print("Database may already exist. Ensuring voicebot owns it...")
        run_psql(postgres_pass, "ALTER DATABASE voicebot OWNER TO voicebot;")
    else:
        print("Database created.")

    print("Done. Run: python manage.py migrate")
    print("Then: python manage.py runserver")

if __name__ == "__main__":
    main()
