package ie.broadsheet.app.requests;

import ie.broadsheet.app.BroadsheetApplication;
import ie.broadsheet.app.R;
import ie.broadsheet.app.model.json.PostList;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import android.util.Log;

import com.google.api.client.http.GenericUrl;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.json.jackson.JacksonFactory;
import com.octo.android.robospice.request.googlehttpclient.GoogleHttpClientSpiceRequest;

public class PostListRequest extends GoogleHttpClientSpiceRequest<PostList> {
    private static final String TAG = "PostListRequest";

    private String baseUrl;

    private int page = 1;

    private int count = 10;

    private String searchTerm;

    public int getPage() {
        return page;
    }

    public void setPage(int page) {
        this.page = page;
    }

    public String getSearchTerm() {
        return searchTerm;
    }

    public void setSearchTerm(String searchTerm) {
        this.searchTerm = searchTerm;
    }

    public PostListRequest() {
        super(PostList.class);

        this.baseUrl = BroadsheetApplication.context().getString(R.string.apiURL) + "/?json=1";

    }

    @Override
    public PostList loadDataFromNetwork() throws Exception {
        Log.d("PostListRequest", "Call web service " + generateUrl());
        HttpRequest request = getHttpRequestFactory().buildGetRequest(new GenericUrl(generateUrl()));
        request.setParser(new JacksonFactory().createJsonObjectParser());
        return request.execute().parseAs(getResultType());
    }

    public String generateUrl() {
        String generatedURL = this.baseUrl;

        if (page > 1) {
            generatedURL += "&page=" + Integer.toString(page);
        }

        generatedURL += "&count=" + Integer.toString(count);

        if ((searchTerm != null) && (searchTerm.length() > 0)) {
            try {
                generatedURL += "&s=" + URLEncoder.encode(searchTerm, "UTF-8");
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        Log.d(TAG, generatedURL);

        return generatedURL;
    }
}