import paramiko
import os
import sys

# CONFIG
HOST = "135.125.102.180"
USER = "ubuntu"
PASS = "BotPascal2026!"
REMOTE_BASE = "/var/www/html/repondeur_mail_grok"
LOCAL_BASE = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

FILES_TO_DEPLOY = [
    "public/index.php",
    "core/PrestaShop.php",
    "scripts/recheck_clients.php"
]

def run_sudo(ssh, command, password):
    """Run command with sudo"""
    cmd = f"echo '{password}' | sudo -S {command}"
    stdin, stdout, stderr = ssh.exec_command(cmd)
    return stdout.read().decode(), stderr.read().decode()

def main():
    print(f"Connecting to {HOST}...")
    try:
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(HOST, username=USER, password=PASS)
        
        # 1. Prepare Permissions (Sudo)
        print("Unlocking permissions...")
        run_sudo(ssh, f"chown -R {USER}:{USER} {REMOTE_BASE}", PASS)
        run_sudo(ssh, f"chmod -R 777 {REMOTE_BASE}", PASS)

        sftp = ssh.open_sftp()
        
        # Upload Files
        for rel_path in FILES_TO_DEPLOY:
            local_path = os.path.join(LOCAL_BASE, rel_path)
            remote_path = os.path.join(REMOTE_BASE, rel_path)
            
            print(f"Uploading {rel_path}...")
            try:
                sftp.put(local_path, remote_path)
            except Exception as e:
                print(f"Failed to upload {rel_path}: {e}")
            
        # 2. Restore Permissions
        print("Restoring permissions...")
        run_sudo(ssh, f"chown -R www-data:www-data {REMOTE_BASE}/data", PASS)
        run_sudo(ssh, f"chmod -R 777 {REMOTE_BASE}/data", PASS)
        
        # Run Recheck Script remotely to populate date
        print("Running recheck_clients.php remotely...")
        stdin, stdout, stderr = ssh.exec_command(f"php {REMOTE_BASE}/scripts/recheck_clients.php")
        print(stdout.read().decode())
        err = stderr.read().decode()
        if err:
            print(f"STDERR: {err}")

        ssh.close()
        print("✅ Deployment & Remote Update Success!")

    except Exception as e:
        print(f"❌ Error: {e}")
        sys.exit(1)

if __name__ == "__main__":
    main()
