package kr.co.hanwha.hifive.screen.main.home;

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

import kr.co.hanwha.hifive.base.BasePresenter;
import kr.co.hanwha.hifive.base.BaseView;
import kr.co.hanwha.hifive.data.model.TaskData;
import kr.co.hanwha.hifive.data.model.TaskListData;
import kr.co.hanwha.hifive.network.hanwha.HanwhaNetworkCallback;

/**
 * Created by sanghoonkwon on 2018. 1. 25..
 */

public interface MainHomeContract {
    interface OnMainHomeListListener {
        /**
         * TASK 클릭
         *
         * @param data TO-DO 데이터
         */
        void onItemClicked(@NonNull TaskData data);

        /**
         * @param data      TASK 데이터
         * @param isChecked TRUE : TASK -> 오늘할 업무로 추가
         *                  FALSE : 오늘할 업무에서 삭제
         */
        void updateTodoTaskToTodayTask(@NonNull TaskData data, boolean isChecked);

        /**
         * TASK 수락 선택
         *
         * @param data TASK 데이터
         */
        void onTaskAcceptClicked(@NonNull TaskData data);

        /**
         * TASK 반려 선택
         *
         * @param data TASK 데이터
         */
        void onTaskRejectClicked(@NonNull TaskData data);
    }

    interface View extends BaseView<Presenter> {
        void refreshData();

//        void setRefreshing(boolean refreshing);

        /**
         * 나의 업무 새로고침 완료
         */
        void stopRefreshAssigned();

        /**
         * 요청한 업무 새로고침 완료
         */
        void stopRefreshRequest();
    }

    interface Presenter extends BasePresenter {
        /**
         * Refresh Data
         */
        void refreshData();

        /**
         * Initialize Data
         */
        void initData();

        /**
         * Initialize data
         * 나의 업무
         *
         * @param needLoading 프로그래스 바 노출
         */
        void initDataAssigned(@NonNull boolean needLoading);

        /**
         * Initialize data
         * 요청한 업무
         *
         * @param needLoading 프로그래스 바 노출
         */
        void initDataRequested(@NonNull boolean needLoading);

        /**
         * 오늘 할 업무 등록 / 해제
         *
         * @param data      TASK 데이터
         * @param isChecked TRUE : TASK -> 오늘할 업무로 추가
         *                  FALSE : 오늘할 업무에서 삭제
         */
        void updateTodoTaskToTodayTask(@NonNull TaskData data, boolean isChecked);

        /**
         * TASK 수락
         *
         * @param data Task 데이터
         */
        void doTaskAccept(@NonNull TaskData data);

        /**
         * TASK 반려
         *
         * @param data Task 데이터
         */
        void doTaskReject(@NonNull TaskData data);
    }
}
