package com.ssyf.config;

import com.jcraft.jsch.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Configuration;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.util.Properties;

@ConditionalOnProperty(name = "ssh.tunnel.enabled", havingValue = "true")
@Configuration
public class SshTunnelConfig {

    @Value("${ssh.host}")          // SSH 服务器地址
    private String sshHost;
    
    @Value("${ssh.port:22}")       // SSH 端口，默认 22
    private int sshPort;
    
    @Value("${ssh.username}")      // SSH 用户名
    private String sshUsername;
    
    @Value("${ssh.password}")      // SSH 密码
    private String sshPassword;
    
    @Value("${ssh.remote.host}")   // 远程 MySQL 服务器地址
    private String remoteHost;
    
    @Value("${ssh.remote.port:3306}") // 远程 MySQL 端口，默认 3306
    private int remotePort;
    
    @Value("${ssh.local.port:33307}")  // 本地转发端口，默认 3306
    private int localPort;

    private Session session;

    @PostConstruct
    public void init() throws JSchException {
        JSch jsch = new JSch();
        session = jsch.getSession(sshUsername, sshHost, sshPort);
        session.setPassword(sshPassword);
        
        // 配置 SSH 连接属性
        Properties config = new Properties();
        config.put("StrictHostKeyChecking", "no"); // 不验证主机密钥（生产环境建议验证）
        session.setConfig(config);
        
        // 连接 SSH 服务器
        session.connect();
        
        // 创建 SSH 隧道（本地端口转发到远程 MySQL 服务器）
        session.setPortForwardingL(localPort, remoteHost, remotePort);
        System.out.println("SSH 隧道已创建: 本地端口 " + localPort + " -> " + remoteHost + ":" + remotePort);
    }

    @PreDestroy
    public void cleanup() {
        if (session != null && session.isConnected()) {
            session.disconnect();
            System.out.println("SSH 隧道已关闭");
        }
    }
}
