import sys
import os
import time

CURRENT_DIR = os.path.dirname(os.path.abspath(__file__))
PARENT_DIR = os.path.dirname(CURRENT_DIR)
for path in (os.getcwd(), CURRENT_DIR, PARENT_DIR):
    if path not in sys.path:
        sys.path.insert(0, path)

try:
    from app import create_app, db, Host
    import ssl_manager
except ImportError as e:
    print(f"Import Error: {e}")
    sys.exit(1)

def main():
    if len(sys.argv) < 3:
        print("Usage: run_ssl_task.py <host_id> <ssl_type> [admin_email_or_ca_id]")
        sys.exit(1)

    host_id = int(sys.argv[1])
    ssl_type = sys.argv[2]
    # Reusing the 3rd argument since it's generic optional param
    arg3 = sys.argv[3] if len(sys.argv) > 3 else ""

    app = create_app()
    with app.app_context():
        from models import CertificateAuthority
        host = db.session.get(Host, host_id)
        if not host:
            print("Host not found")
            sys.exit(1)
        
        print(f"Starting SSL configuration for {host.domain}...")
        
        if ssl_type == 'self':
            ca_cert_path = None
            ca_key_path = None
            if arg3 and arg3.isdigit():
                ca = db.session.get(CertificateAuthority, int(arg3))
                if ca:
                    ca_cert_path = ca.cert_path
                    ca_key_path = ca.key_path
            success, msg = ssl_manager.enable_ssl_selfsigned(host.domain, ca_cert_path, ca_key_path)
        elif ssl_type == 'letsencrypt':
            success, msg = ssl_manager.enable_ssl_letsencrypt(host.domain, arg3)
        else:
            print(f"Unsupported ssl type: {ssl_type}")
            sys.exit(1)

        if success:
            host.ssl_enabled = True
            host.ssl_provider = ssl_type
            db.session.commit()
            print("---------------------------------------------------")
            print(f"SUCCESS: {msg}")
            print("---------------------------------------------------")
            sys.exit(0)
        else:
            print("---------------------------------------------------")
            print(f"FAILURE: {msg}")
            print("---------------------------------------------------")
            sys.exit(1)

if __name__ == "__main__":
    main()
