import subprocess
import shlex
import glob
import os
import re

def run_command(command):
    try:
        # Note: shlex.split splits args, but subprocess.run with a list is safer than shell=True.
        # However, validation of inputs is still critical.
        result = subprocess.run(shlex.split(command), capture_output=True, text=True)
        return result.returncode == 0, result.stdout, result.stderr
    except Exception as e:
        return False, "", str(e)

def get_installed_php_versions():
    # Use glob to find files matching the pattern
    files = glob.glob('/usr/bin/php*')
    versions = []
    for file_path in files:
        # Extract version number
        # Filename is usually /usr/bin/php8.2 or similar
        filename = os.path.basename(file_path)
        if filename.startswith('php'):
            v = filename[3:] # Remove 'php' prefix
            if v and v[0].isdigit():
                versions.append(v)
    return sorted(list(set(versions)))

def get_install_php_version_cmd(version):
    if not re.match(r'^\d+\.\d+$', version):
        return None
    return f"apt-get install -y php{version} php{version}-fpm php{version}-cli php{version}-common"

def get_install_php_extension_cmd(version, extension):
    if not re.match(r'^\d+\.\d+$', version):
        return None
    if not re.match(r'^[a-zA-Z0-9_-]+$', extension):
        return None
    return f"apt-get install -y php{version}-{extension}"

# Kept for compatibility if needed, but task manager is preferred
def install_php_version(version):
    cmd = get_install_php_version_cmd(version)
    if not cmd: return False, "", "Invalid Input"
    return run_command(cmd)

def install_php_extension(version, extension):
    cmd = get_install_php_extension_cmd(version, extension)
    if not cmd: return False, "", "Invalid Input"
    return run_command(cmd)

def get_common_extensions():
    return ['curl', 'mbstring', 'zip', 'gd', 'mysql', 'xml', 'bcmath', 'intl', 'soap']
