package com.github.scribejava.apis;

import android.util.Log;

import com.github.scribejava.core.builder.api.DefaultApi20;
import com.github.scribejava.core.extractors.OAuth2AccessTokenExtractor;
import com.github.scribejava.core.extractors.TokenExtractor;
import com.github.scribejava.core.model.OAuth2AccessToken;
import com.github.scribejava.core.model.Verb;

public class ConfigurableApi extends DefaultApi20 {

    private String accessTokenEndpoint;

    private String authorizationBaseUrl;

    private Verb accessTokenVerb = Verb.GET;

    protected ConfigurableApi() {
    }

    private static class InstanceHolder {
        private static final ConfigurableApi INSTANCE = new ConfigurableApi();
    }

    public static ConfigurableApi instance() {
        return InstanceHolder.INSTANCE;
    }

    public ConfigurableApi setAccessTokenEndpoint(String endpoint) {
        accessTokenEndpoint = endpoint;
        return this;
    }

    public ConfigurableApi setAuthorizationBaseUrl(String baseUrl) {
        authorizationBaseUrl = baseUrl;
        return this;
    }

    public ConfigurableApi setAccessTokenVerb(String verb) {
        if (verb.equalsIgnoreCase("GET")) {
            accessTokenVerb = Verb.GET;
        } else if (verb.equalsIgnoreCase("POST")) {
            accessTokenVerb = Verb.POST;
        } else {
            Log.e("ConfigurableApi", "Expected GET or POST string values for accessTokenVerb.");
        }

        return this;
    }

    @Override
    public Verb getAccessTokenVerb() {
        return accessTokenVerb;
    }

    @Override
    public String getAccessTokenEndpoint() {
        return accessTokenEndpoint;
    }

    @Override
    protected String getAuthorizationBaseUrl() {
        return authorizationBaseUrl;
    }
}