package com.linecorp.linesdk.dialog.internal;

import androidx.annotation.Nullable;

import com.linecorp.linesdk.LineApiResponse;
import com.linecorp.linesdk.SendMessageResponse;
import com.linecorp.linesdk.api.LineApiClient;
import com.linecorp.linesdk.message.MessageData;

import java.util.ArrayList;
import java.util.List;

public class SendMessageTask extends android.os.AsyncTask<List<TargetUser>, Void,
        LineApiResponse<List<SendMessageResponse>>> {
    private LineApiClient lineApiClient;
    private List<MessageData> messages;
    @Nullable
    private ApiStatusListener apiStatusListener;

    SendMessageTask(LineApiClient lineApiClient, List<MessageData> messageDataList) {
        this(lineApiClient, messageDataList, null);
    }

    SendMessageTask(
            LineApiClient lineApiClient,
            List<MessageData> messages,
            @Nullable ApiStatusListener apiStatusListener
    ) {
        this.lineApiClient = lineApiClient;
        this.messages = messages;
        this.apiStatusListener = apiStatusListener;
    }

    @Override
    protected LineApiResponse<List<SendMessageResponse>> doInBackground(List<TargetUser>... targetUsers) {
        List<String> targetUserIds = new ArrayList<>();
        for (TargetUser targetUser : targetUsers[0]) {
            targetUserIds.add(targetUser.getId());
        }
        return lineApiClient.sendMessageToMultipleUsers(targetUserIds, messages, true);
    }


    @Override
    protected void onPostExecute(LineApiResponse<List<SendMessageResponse>> lineApiResponse) {
        if (apiStatusListener != null) {
            if (lineApiResponse.isSuccess()) {
                apiStatusListener.onSuccess();
            } else {
                apiStatusListener.onFailure();
            }
        }
    }
}