package kr.co.hanwha.hifive.data.source.contract;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;

import kr.co.hanwha.hifive.base.BaseDataSource;
import kr.co.hanwha.hifive.data.model.BaseData;
import kr.co.hanwha.hifive.data.model.TaskData;
import kr.co.hanwha.hifive.enums.TaskEvaluationType;
import kr.co.hanwha.hifive.network.hanwha.HanwhaNetworkCallback;

public interface TaskStatusDataSource extends BaseDataSource {
    /**
     * TASK 수락 : STATUS 20
     *
     * @param context  Context
     * @param taskData TASK DATA
     * @param callback 콜백
     */
    void requestTaskAccept(@NonNull Context context,
                           @NonNull TaskData taskData,
                           @Nullable HanwhaNetworkCallback<BaseData> callback);

    /**
     * TASK 반려 : STATUS 40
     *
     * @param context  Context
     * @param taskData TASK DATA
     * @param message  반려 메세지
     * @param callback 콜백
     */
    void requestTaskReject(@NonNull Context context,
                           @NonNull TaskData taskData,
                           @NonNull String message,
                           @Nullable HanwhaNetworkCallback<BaseData> callback);

    /**
     * 반려된 TASK 요청 삭제(취소) : STATUS 80
     *
     * @param context  Context
     * @param taskData Task 데이터
     * @param callback 콜백
     */
    void requestSetTaskDeleteRequest(@NonNull Context context,
                                     @NonNull TaskData taskData,
                                     @Nullable HanwhaNetworkCallback callback);

    /**
     * 반려된 TASK 재 요청 : STATUS 30
     *
     * @param context  Context
     * @param taskData Task 데이터
     * @param callback 콜백
     */
    void requestSetTaskReRequest(@NonNull Context context,
                                 @NonNull TaskData taskData,
                                 @Nullable HanwhaNetworkCallback callback);

    /**
     * TASK 평가(Resolved) : STATUS 60
     *
     * @param context            Context
     * @param taskData           TASK DATA
     * @param taskEvaluationType 평가
     * @param callback           콜백
     */
    void requestSetTaskEvaluation(@NonNull Context context,
                                  @NonNull TaskData taskData,
                                  @NonNull TaskEvaluationType taskEvaluationType,
                                  @Nullable HanwhaNetworkCallback<BaseData> callback);


    /**
     * TASK 평가 - 수락 : STATUS 80
     *
     * @param context  Context
     * @param taskData Task 데이터
     * @param callback 콜백
     */
    void requestSetTaskEvaluationAccept(@NonNull Context context,
                                        @NonNull TaskData taskData,
                                        @Nullable HanwhaNetworkCallback callback);

    /**
     * TASK 평가 - 반려 : STATUS 70
     *
     * @param context  Context
     * @param taskData Task 데이터
     * @param message  메세지
     * @param callback 콜백
     */
    void requestSetTaskEvaluationReject(@NonNull Context context,
                                        @NonNull TaskData taskData,
                                        @NonNull String message,
                                        @Nullable HanwhaNetworkCallback callback);
}
