package net.mabako.steamgifts.tasks;

import android.os.AsyncTask;
import android.util.Log;

import net.mabako.Constants;
import net.mabako.steamgifts.data.GiveawayGroup;
import net.mabako.steamgifts.fragments.GiveawayGroupListFragment;
import net.mabako.steamgifts.persistentdata.SteamGiftsUserData;

import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;


public class LoadGiveawayGroupsTask extends AsyncTask<Void, Void, List<GiveawayGroup>> {
    private static final String TAG = LoadGiveawayGroupsTask.class.getSimpleName();

    private final GiveawayGroupListFragment fragment;
    private final int page;
    private final String path;

    public LoadGiveawayGroupsTask(GiveawayGroupListFragment fragment, int page, String path) {
        this.fragment = fragment;
        this.page = page;
        this.path = path;
    }

    @Override
    protected List<GiveawayGroup> doInBackground(Void... params) {
        Log.d(TAG, "Fetching giveaways for page " + page);

        try {
            // Fetch the Giveaway page

            Connection jsoup = Jsoup.connect("https://www.steamgifts.com/giveaway/" + path + "/groups/search")
                    .userAgent(Constants.JSOUP_USER_AGENT)
                    .timeout(Constants.JSOUP_TIMEOUT);
            jsoup.data("page", Integer.toString(page));

            if (SteamGiftsUserData.getCurrent(fragment.getContext()).isLoggedIn())
                jsoup.cookie("PHPSESSID", SteamGiftsUserData.getCurrent(fragment.getContext()).getSessionId());
            Document document = jsoup.get();

            SteamGiftsUserData.extract(fragment.getContext(), document);

            // Parse all rows of groups
            Elements groups = document.select(".table__row-inner-wrap");
            Log.d(TAG, "Found inner " + groups.size() + " elements");

            List<GiveawayGroup> groupList = new ArrayList<>();
            for (Element element : groups) {
                Element link = element.select(".table__column__heading").first();

                // Basic information
                String title = link.text();
                String id = link.attr("href").substring(7, 12);

                String avatar = null;
                Element avatarNode = element.select(".global__image-inner-wrap").first();
                if (avatarNode != null)
                    avatar = Utils.extractAvatar(avatarNode.attr("style"));

                GiveawayGroup group = new GiveawayGroup(id, title, avatar);
                groupList.add(group);
            }

            return groupList;
        } catch (IOException e) {
            Log.e(TAG, "Error fetching URL", e);
            return null;
        }
    }

    @Override
    protected void onPostExecute(List<GiveawayGroup> result) {
        super.onPostExecute(result);
        fragment.addItems(result, page == 1);
    }
}