import XCTest
@testable import CommandNotch

@MainActor
final class AppSettingsControllerTests: XCTestCase {
    func testTerminalSessionConfigurationIncludesShellPath() {
        let store = InMemoryAppSettingsStore()
        var settings = AppSettings.default
        settings.terminal.shellPath = "/opt/homebrew/bin/fish"
        store.storedSettings = settings

        let controller = AppSettingsController(store: store)

        XCTAssertEqual(controller.terminalSessionConfiguration.shellPath, "/opt/homebrew/bin/fish")
    }

    func testTerminalSizePresetsDecodeFromTypedSettings() {
        let store = InMemoryAppSettingsStore()
        let presets = [
            TerminalSizePreset(name: "Wide", width: 960, height: 420, hotkey: .cmdShiftDigit(4))
        ]
        var settings = AppSettings.default
        settings.terminal.sizePresetsJSON = TerminalSizePresetStore.encodePresets(presets)
        store.storedSettings = settings

        let controller = AppSettingsController(store: store)

        XCTAssertEqual(controller.terminalSizePresets, presets)
    }
}

private final class InMemoryAppSettingsStore: AppSettingsStoreType {
    var storedSettings = AppSettings.default

    func load() -> AppSettings {
        storedSettings
    }

    func save(_ settings: AppSettings) {
        storedSettings = settings
    }
}
