#!/usr/bin/env python3
"""
服务器环境初始化脚本 - 在阿里云服务器上安装所有必要依赖
"""

import paramiko
import configparser
import logging

logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(levelname)s - %(message)s',
    handlers=[
        logging.FileHandler('init_server_env.log'),
        logging.StreamHandler()
    ]
)
logger = logging.getLogger(__name__)

CONFIG_PATH = 'scripts/deploy_config.ini'

def load_config():
    config = configparser.ConfigParser()
    config.read(CONFIG_PATH)
    return config

def execute_command(ssh, cmd, step_name, timeout=300):
    logger.info(f"执行步骤: {step_name}")
    logger.debug(f"命令: {cmd}")
    try:
        stdin, stdout, stderr = ssh.exec_command(cmd, timeout=timeout)
        stdout_text = stdout.read().decode('utf-8', errors='ignore').strip()
        stderr_text = stderr.read().decode('utf-8', errors='ignore').strip()
        if stderr_text:
            logger.warning(f"警告: {stderr_text}")
        if stdout_text:
            logger.debug(f"输出: {stdout_text}")
        return True, stdout_text
    except Exception as e:
        logger.error(f"失败: {e}")
        return False, str(e)

def init_server():
    config = load_config()
    ssh_config = config['ssh']
    
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    try:
        logger.info(f"连接服务器: {ssh_config['user']}@{ssh_config['host']}")
        ssh.connect(
            hostname=ssh_config['host'],
            port=int(ssh_config['port']),
            username=ssh_config['user'],
            key_filename=ssh_config['key_path'],
            timeout=30
        )
        logger.info("✅ SSH连接成功")
        
        steps = [
            ("更新系统", "yum update -y"),
            ("安装EPEL源", "yum install -y epel-release"),
            ("安装Podman", "yum install -y podman podman-compose"),
            ("安装Git", "yum install -y git"),
            ("安装Java 21", "yum install -y java-21-openjdk java-21-openjdk-devel"),
            ("安装Maven", "yum install -y maven"),
            ("安装Node.js", "curl -fsSL https://rpm.nodesource.com/setup_20.x | bash - && yum install -y nodejs"),
            ("安装npm", "npm install -g npm@latest"),
            ("安装curl", "yum install -y curl"),
            ("安装nc", "yum install -y nc"),
            ("安装redis-cli", "yum install -y redis"),
            ("安装mysql客户端", "yum install -y mariadb"),
        ]
        
        for step_name, cmd in steps:
            success, output = execute_command(ssh, cmd, step_name)
            if not success:
                logger.error(f"❌ {step_name}失败")
                return False
            logger.info(f"✅ {step_name}完成")
        
        execute_command(ssh, "podman --version", "验证Podman")
        execute_command(ssh, "git --version", "验证Git")
        execute_command(ssh, "java -version", "验证Java")
        execute_command(ssh, "mvn --version", "验证Maven")
        execute_command(ssh, "node --version", "验证Node.js")
        execute_command(ssh, "npm --version", "验证npm")
        
        logger.info("🎉 服务器环境初始化完成!")
        return True
        
    finally:
        ssh.close()
        logger.info("SSH连接已关闭")

if __name__ == '__main__':
    init_server()