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

import android.support.annotation.NonNull;

import java.util.List;

import kr.co.hanwha.hifive.base.BasePresenter;
import kr.co.hanwha.hifive.base.BaseView;
import kr.co.hanwha.hifive.data.model.ProfileData;
import kr.co.hanwha.hifive.data.model.ProjectInfoData;
import kr.co.hanwha.hifive.data.model.TaskData;
import kr.co.hanwha.hifive.screen.main.setting.myhome.contract.MyHomeContract;

/**
 * Created by aaron on 2018. 10. 16.
 */
public interface MainMyHomeContract {

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

        /**
         * OKR 새로고침 완료
         */
        void stopRefreshOkr();

        /**
         * To-Do 새로고침 완료
         */
        void stopRefreshTodo();

        /**
         * Request 새로고침 완료
         */
        void stopRefreshRequest();

        /**
         * Profile 새로고침 완료
         */
        void stopRefreshProfile();

        void setTabIndex(int index);

        void setProfile(@NonNull ProfileData profileData);

        void setProfileUnit(List<ProjectInfoData> projects);
    }

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

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

        /**
         * Initialize data
         * OKR
         *
         * @param needLoading 프로그래스 바 노출
         */
        void initDataOkr(int selectMemberId, boolean needLoading);

        /**
         * Initialize data
         * To-Do
         *
         * @param needLoading 프로그래스 바 노출
         */
        void initDataTodo(int selectMemberId, boolean needLoading);

        /**
         * Initialize data
         * Request
         *
         * @param needLoading 프로그래스 바 노출
         */
        void initDataRequest(int selectMemberId, boolean needLoading);

        /**
         * Initialize data
         * Profile
         *
         * @param needLoading 프로그래스 바 노출
         */
        void initDataProfile(int selectMemberId, 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);

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

        /**
         * 평가 반려 선택
         *
         * @param data TASK 데이터
         */
        void doEvalRejectClicked(@NonNull TaskData data);

        /**
         * 재평가 선택
         *
         * @param data TASK 데이터
         */
        void doEvalRevaluationClicked(@NonNull TaskData data);

        /**
         * 요청 삭제
         *
         * @param data TASK 데이터
         */
        void doDeleteRequestClicked(@NonNull TaskData data);

        /**
         * 수정후 재 요청
         *
         * @param data TASK 데이터
         */
        void doReRequestClicked(@NonNull TaskData data);
    }
}
