//
//  SDLAddressResolverPool.swift
//  Tun
//
//  Created by 安礼成 on 2026/2/3.
//

import Foundation
import NIOCore
import NIOPosix

actor SDLAddressResolver {
    static let shared = SDLAddressResolver(threads: System.coreCount)
    
    private let pool: NIOThreadPool
    private var cache: [String: SocketAddress] = [:]
    
    private init(threads: Int = 2) {
        self.pool = NIOThreadPool(numberOfThreads: threads)
        self.pool.start()
    }
    
    func resolve(host: String, port: Int) async throws -> SocketAddress {
        let key = "\(host):\(port)"
        if let cached = cache[key] {
            return cached
        }
        
        let address = try await pool.runIfActive {
            try SocketAddress.makeAddressResolvingHost(host, port: port)
        }
        cache[key] = address
        
        return address
    }
    
    deinit {
        pool.shutdownGracefully { _ in }
    }
    
}
