package com.nibado.example.springasync.service;

import com.nibado.example.springasync.domain.Task;
import com.squareup.okhttp.Callback;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.io.IOException;

@Slf4j
@Service
public class AggregatorService {
    private OkHttpClient client = new OkHttpClient();

    public void execute(final Task task) {
        log.info("Started task with {} urls", task.getUrls().size());
        task.start();
        for(int i = 0; i < task.getUrls().size(); i++) {
            final int index = i;
            final long time = System.currentTimeMillis();
            String url = task.getUrls().get(i);
            Request req = new Request.Builder().get().url(url).build();

            client.newCall(req).enqueue(new Callback() {
                @Override
                public void onFailure(Request request, IOException e) {
                    task.fail(index, time, request, e);
                }

                @Override
                public void onResponse(Response response) throws IOException {
                    task.success(index, time, response);
                }
            });
        }
    }
}