package com.radiola.data.repository

import com.radiola.data.remote.RadiolaApi
import com.radiola.domain.model.Track
import com.radiola.domain.repository.RecognizeResult
import com.radiola.domain.repository.ShazamRepository
import retrofit2.HttpException
import javax.inject.Inject

class ShazamRepositoryImpl @Inject constructor(
    private val api: RadiolaApi
) : ShazamRepository {

    override suspend fun recognize(stationId: Int, stationName: String): RecognizeResult {
        return try {
            val res = api.recognizeTrack(stationId)
            if (res.matched && !res.artist.isNullOrBlank() && !res.song.isNullOrBlank()) {
                RecognizeResult.Found(
                    Track(
                        artist = res.artist,
                        song = res.song,
                        coverUrl = res.coverUrl,
                        stationName = stationName
                    )
                )
            } else {
                RecognizeResult.NotFound
            }
        } catch (e: HttpException) {
            val msg = when (e.code()) {
                503 -> "Распознавание временно недоступно"
                400 -> "На этой станции нет музыки"
                429 -> "Слишком много запросов, попробуйте позже"
                else -> "Не удалось распознать трек"
            }
            RecognizeResult.Error(msg)
        } catch (e: Exception) {
            RecognizeResult.Error("Нет связи с сервером")
        }
    }
}
