package makulib;

import android.os.AsyncTask;
import android.text.TextUtils;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.CookieManager;
import java.net.HttpCookie;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import java.util.Map;

/**
 * Created by nmoya on 7/28/15.
 */
public class HTTPGet extends AsyncTask<String, Void, String> {

    private NetworkCallback listener;
    private CookieManager cookies;
    static final String COOKIES_HEADER = "Set-Cookie";

    public HTTPGet(NetworkCallback listener, CookieManager cookies)
    {
        this.listener = listener;
        this.cookies = cookies;
    }
    @Override
    protected String doInBackground(String... _url) {
        URL url;
        HttpURLConnection connection;
        BufferedReader rd;
        String line;
        StringBuilder result = new StringBuilder();
        try {
            url = new URL(_url[0]);
            connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.setRequestProperty("Cookie", TextUtils.join(",", this.cookies.getCookieStore().getCookies()));
            rd = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            while ((line = rd.readLine()) != null) {
                result.append(line);
            }
            rd.close();

            Map<String, List<String>> headerFields = connection.getHeaderFields();
            List<String> cookiesHeader = headerFields.get(COOKIES_HEADER);
            if(cookiesHeader != null)
            {
                for (String cookie : cookiesHeader)
                {
                    this.cookies.getCookieStore().add(null, HttpCookie.parse(cookie).get(0));
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result.toString();
    }

    @Override
    protected void onPostExecute(String response) {
//        Log.i("Response", response);
        this.listener.onGetResponseToJava(response, this.cookies);
    }
}
