package com.radiola.domain.repository

import com.radiola.domain.model.DeeplinkService
import kotlinx.coroutines.flow.Flow

interface SettingsRepository {
    fun getLastStationId(): Flow<Int?>
    suspend fun setLastStationId(id: Int)
    fun getSleepTimerMinutes(): Flow<Int>
    suspend fun setSleepTimerMinutes(minutes: Int)
    fun getEnabledDeeplinkServices(): Flow<Set<String>>
    suspend fun setEnabledDeeplinkServices(serviceIds: Set<String>)
    fun getEqualizerPreset(): Flow<String>
    suspend fun setEqualizerPreset(preset: String)
    fun isRecordingEnabled(): Flow<Boolean>
    suspend fun setRecordingEnabled(enabled: Boolean)
    // Предпочитаемый битрейт (kbps). 0 = авто (брать качество по умолчанию станции).
    fun getPreferredBitrate(): Flow<Int>
    suspend fun setPreferredBitrate(bitrate: Int)
    // Код страны пользователя (по IP), напр. "RU". null — не определён.
    fun getCountryCode(): Flow<String?>
    suspend fun setCountryCode(code: String)
    // Стиль визуализатора звука в плеере (ключ VisualizerStyle).
    fun getVisualizerStyle(): Flow<String>
    suspend fun setVisualizerStyle(style: String)
    // Цветовая тема приложения (id ThemePalette, напр. "forest"). По умолчанию "forest".
    fun getThemePalette(): Flow<String>
    suspend fun setThemePalette(id: String)

    // ── Эквалайзер и улучшайзеры звука (android.media.audiofx) ──
    fun getEqEnabled(): Flow<Boolean>
    suspend fun setEqEnabled(enabled: Boolean)
    // Индекс системного пресета эквалайзера; -1 = свой (ручные полосы).
    fun getEqPreset(): Flow<Int>
    suspend fun setEqPreset(index: Int)
    // Уровни полос в миллибелах через запятую (под текущее число полос устройства).
    fun getEqBands(): Flow<String>
    suspend fun setEqBands(csv: String)
    fun getEqBass(): Flow<Int>           // 0..100 %
    suspend fun setEqBass(value: Int)
    fun getEqVirtualizer(): Flow<Int>    // 0..100 %
    suspend fun setEqVirtualizer(value: Int)
    fun getEqLoudness(): Flow<Int>       // 0..100 % → 0..+12 дБ
    suspend fun setEqLoudness(value: Int)
}
