#!/usr/bin/env python3
"""
Set or reset the MX Web Admin password.
Works on Windows, Linux, cPanel, VPS, and Docker.
"""
from __future__ import annotations

import os
import sys

# Ensure Linux / non-DPAPI storage fallback is permitted on hosting servers
os.environ.setdefault("MX_ALLOW_INSECURE_DEV_STORE", "1")

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
if BASE_DIR not in sys.path:
    sys.path.insert(0, BASE_DIR)

from mx_security_hardening import set_web_admin_password, record_login_result

def main():
    email = os.environ.get("MX_WEB_ADMIN_EMAIL", "support@moxiedigital.in").strip().lower()
    
    if len(sys.argv) > 1:
        password = sys.argv[1].strip()
        if len(sys.argv) > 2:
            email = sys.argv[2].strip().lower()
    else:
        import getpass
        print(f"--- MX Web Admin Password Setup ({email}) ---")
        password = getpass.getpass("Enter new password (minimum 10 characters): ")
        confirm = getpass.getpass("Confirm new password: ")
        if password != confirm:
            print("\n[ERROR] Passwords do not match.")
            return 1
            
    if len(password) < 10:
        print("\n[ERROR] Password must be at least 10 characters long.")
        return 1

    ok = set_web_admin_password(password, email)
    if ok:
        for host in ("127.0.0.1", "::1", "localhost"):
            try:
                record_login_result(host, True, "web_admin_ip")
            except Exception:
                pass
        try:
            record_login_result(email, True, "web_admin")
        except Exception:
            pass
        print(f"\n[OK] Admin password for '{email}' has been successfully set and lockouts cleared.")
        return 0
    else:
        print("\n[ERROR] Failed to save admin password.")
        return 1

if __name__ == "__main__":
    sys.exit(main())
