package com.dowstats.service.user

import com.dowstats.configuration.SteamConfig
import com.dowstats.data.entities.User
import com.dowstats.data.repositories.UserRepository
import com.fasterxml.jackson.databind.JsonNode
import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.net.URL

@Service
class SteamService @Autowired constructor(
    val steamConfig: SteamConfig,
    val userRepo: UserRepository
) {

    data class UserData(
        val name: String,
        val avatarUrl: String,
    )

    val mapper = jacksonObjectMapper()

    fun updateUserBySteamId(steamId: String): User {

        val userInfo = getUserData(steamId)

        val userToSaveOrUpdate = userRepo.findBySteamId(steamId).singleOrNull() ?: User().apply {
            this.avatarUrl = userInfo.avatarUrl
            this.name = userInfo.name
            this.steamId = steamId
        }


        return userRepo.save(userToSaveOrUpdate)
    }


    private fun getUserData(steamId: String): UserData {
        val userDetails = URL("https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/" +
                "?key=${steamConfig.key}" +
                "&steamids=$steamId").readText()

        val model: JsonNode = mapper.readTree(userDetails)

        return UserData(model["response"]["players"].get(0)["personaname"].textValue(),
            model["response"]["players"].get(0)["avatarmedium"].textValue())

    }


}
