package rocks.voss.spotifytonieboxsync;

import com.wrapper.spotify.SpotifyApi;
import com.wrapper.spotify.SpotifyHttpManager;
import com.wrapper.spotify.requests.authorization.authorization_code.AuthorizationCodeRequest;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;

import java.net.URI;
import java.util.Properties;

@Data
class SpotifyHandler {
    private String clientId;
    private String clientSecret;
    private URI redirectUri;
    private SpotifyApi spotifyApi = null;
    private AuthorizationCodeRequest authorizationCodeRequest;
    private String accessToken;
    private String refreshToken;
    private String cachePath;

    public static SpotifyHandler createHandlerByProperties(Properties properties) {
        SpotifyHandler spotifyHandler = new SpotifyHandler();
        spotifyHandler.setClientId(properties.getProperty("spotify.clientId"));
        spotifyHandler.setClientSecret(properties.getProperty("spotify.clientSecret"));
        spotifyHandler.setRedirectUri(SpotifyHttpManager.makeUri(properties.getProperty("spotify.redirectUri")));
        spotifyHandler.setRefreshToken(properties.getProperty("spotify.refreshToken"));
        spotifyHandler.setCachePath(properties.getProperty("spotify.cachePath"));
        return spotifyHandler;
    }

    public SpotifyApi getSpotifyApi() {
        if (this.spotifyApi == null) {
            SpotifyApi.Builder builder = new SpotifyApi.Builder()
                    .setClientId(clientId)
                    .setClientSecret(clientSecret)
                    .setRedirectUri(redirectUri);
            if (StringUtils.isNotBlank(accessToken)) {
                builder.setAccessToken(accessToken);
            }
            if (StringUtils.isNotBlank(refreshToken)) {
                builder.setRefreshToken(refreshToken);
            }
            this.spotifyApi = builder.build();
        }
        return spotifyApi;
    }

    public void setAccessToken(String accessToken) {
        this.accessToken = accessToken;
        this.spotifyApi = null;
    }
}