package kr.co.hanwha.hifive.network;

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

import java.util.ArrayList;

import kr.co.hanwha.hifive.data.model.CampaignData;
import kr.co.hanwha.hifive.data.model.ReqMemberInfo;
import kr.co.hanwha.hifive.data.model.TaskData;
import kr.co.hanwha.hifive.enums.MessageType;
import kr.co.hanwha.hifive.enums.ProjectEvaluationType;
import kr.co.hanwha.hifive.enums.TaskEvaluationType;
import kr.co.hanwha.hifive.network.hanwha.HanwhaNetworkCallback;

/**
 * API Interface
 *
 * @see HFNetworkUtil
 * Created by sanghoonkwon on 2018. 1. 11..
 */

public interface HFNetworkContract {
    /**
     * SETTING - 개인정보 관리
     *
     * @return URL
     */
    String getWebUrlSettingEditProfile();

    /**
     * SETTING - 비밀번호 재설정
     *
     * @return URL
     */
    String getWebUrlSettingEditPassword();

    /**
     * SETTING - 간편 비밀번호 초기화
     *
     * @return URL
     */
    String getWebUrlSettingDeleteSimplePassword();

    /**
     * SETTING - 유닛 리스트(캡틴인 목록만)
     *
     * @return URL
     */
    String getWebUrlSettingGetUnitList();

    /**
     * PROJECT - EDIT ISSUE - WEB URL
     *
     * @return URL
     */
    String getWebUrlSettingEditUnit();

    /**
     * 회원가입(인증)
     *
     * @return URL
     */
    String getWebUrlSignUp();

    /**
     * 푸쉬 토큰 등록
     * <p>
     * <b>Sample</b><br>
     * Request URL : https://qtalk.dreamplus.center/newgw/a/v2/members/add/device
     * <br>
     * HEADER : {User-Agent=Android-dev/7.0 DCA/0.5.1, Content-Type=application/json}
     * <br>
     * BODY :   {"device_uid":"406a70f8584d1afd","token":"dKIksGGU-LI:APA91bEAUD4sXARhSa2QmsZ1E_OOpb0tOJw22NKCfQDzST9w6dy0PN4Xi47Ynh0Bq5k_REtZWs_pKueWX-URzN5mULljSmL85q_o3hqJrofsVA2kLqZYmVvwzRxXxZOOPIipV4YBnZaU","encryption_member_id":"Oe+Y\/1wLWImqigM+TWXHbQ=="}
     * <br><br><br>
     *
     * @param context              Context
     * @param encryption_member_id 암호화된 멤버 ID
     * @param token                토큰
     * @param device_uid           UUID
     * @param callback             콜백
     */
    void requestMemberDeviceAdd(@NonNull Context context, @NonNull String encryption_member_id, @NonNull String token, @NonNull String device_uid, @Nullable HanwhaNetworkCallback callback);

    /**
     * MAIN - HOME : TASK 목록 - 나의 업무 목록 조회
     * <p>
     * <b>Sample</b><br>
     * Request URL : http://192.168.0.35:38999/a/v2/tasks/get/main/assigned
     * <br>
     * HEADER : {User-Agent=Android-dev/7.0 DCA/0.5.1, Content-Type=application/json}
     * <br>
     * BODY :   {"encryption_member_id":"Oe+Y\/1wLWImqigM+TWXHbQ=="}
     * <br><br><br>
     *
     * @param context              Context
     * @param encryption_member_id 암호화된 멤버 ID
     * @param callback             콜백
     */
    void requestTasksGetMainAssigned(@NonNull Context context, @NonNull String encryption_member_id, @Nullable HanwhaNetworkCallback callback);

    /**
     * MAIN - HOME : TASK 목록 - 요청한 업무 목록 조회
     * <p>
     * <b>Sample</b><br>
     * Request URL : http://192.168.0.35:38999/a/v2/tasks/get/main/request
     * <br>
     * HEADER : {User-Agent=Android-dev/7.0 DCA/0.5.1, Content-Type=application/json}
     * <br>
     * BODY :   {"encryption_member_id":"Oe+Y\/1wLWImqigM+TWXHbQ=="}
     * <br><br><br>
     *
     * @param context              Context
     * @param encryption_member_id 암호화된 멤버 ID
     * @param callback             콜백
     */
    void requestTasksGetMainRequest(@NonNull Context context, @NonNull String encryption_member_id, @Nullable HanwhaNetworkCallback callback);

    /**
     * MAIN - PROJECT : Campaign 별 TASK 목록
     * <p>
     * <b>Sample</b><br>
     * Request URL : http://192.168.0.156:38999/a/v2/projects/get/view
     * <br>
     * HEADER : {User-Agent=Android-dev/7.0 DCA/0.5.1, Content-Type=application/json}
     * <br>
     * BODY :   {"encryption_member_id":"Oe+Y\/1wLWImqigM+TWXHbQ==", "project_id":41}
     * <br><br><br>
     *
     * @param context              Context
     * @param encryption_member_id 암호화된 멤버 ID
     * @param project_id           PROJECT ID
     * @param callback             콜백
     */
    void requestProjectsGetView(@NonNull Context context, @NonNull String encryption_member_id, int project_id, boolean isAll,@Nullable HanwhaNetworkCallback callback);

    /**
     * PROJECT - 내가 속해있는 프로젝트 목록
     * <p>
     * <b>Sample</b><br>
     * Request URL : https://qtalk-dev.dreamplus.center/newgw/a/v2/projects/get/view/dropdown
     * <br>
     * HEADER : {User-Agent=Android-dev/7.0 DCA/0.5.1, Content-Type=application/json}
     * <br>
     * BODY :   {"client_timezone" : "09:00", "encryption_member_id":"Oe+Y/1wLWImqigM+TWXHbQ=="}
     * <br><br><br>
     *
     * @param context              Context
     * @param encryption_member_id 암호화된 멤버 ID
     * @param callback             콜백
     */
    void requestProjectsGetMine(@NonNull Context context, @NonNull String encryption_member_id, @Nullable HanwhaNetworkCallback callback);

    /**
     * PROJECT UPDATE 신호등 칼라 코드
     * <p>
     * <b>Sample</b><br>
     * Request URL : https://qtalk-dev.dreamplus.center/newgw/a/v2/projects/update/eval
     * <br>
     * HEADER : {User-Agent=Android-dev/7.0 DCA/0.5.1, Content-Type=application/json}
     * <br>
     * BODY :   {"client_timezone" : "09:00", "encryption_member_id":"Oe+Y/1wLWImqigM+TWXHbQ==", "project_id":"1", "evaluation":200}
     * <br><br><br>
     *
     * @param context              Context
     * @param encryption_member_id 암호화된 멤버 ID
     * @param project_id           프로젝트 ID
     * @param evaluation           프로젝트 신호등 코드
     * @param callback             콜백
     */
    void requestProjectsUpdateEvaluation(@NonNull Context context, @NonNull String encryption_member_id, @NonNull int project_id, @NonNull ProjectEvaluationType evaluation, @Nullable HanwhaNetworkCallback callback);

    /**
     * 업데이트 확인 API
     * <p>
     * <b>Sample</b><br>
     * Request URL : https://qtalk.dreamplus.center/newgw/a/v2/app/update
     * <br>
     * HEADER : {User-Agent=Android-dev/7.0 DCA/0.5.1, Content-Type=application/json}
     * <br>
     * BODY :  {"client_timezone" : "09:00","login_id":"201704014"}
     * <br><br><br>
     *
     * @param context  Context
     * @param login_id 로그인 ID(사번)
     * @param callback 콜백
     */
    void requestCheckUpdate(@NonNull Context context, @Nullable String login_id, @Nullable HanwhaNetworkCallback callback);

    /**
     * 로그인
     * <p>
     * <b>Sample</b><br>
     * Request URL : https://qtalk.dreamplus.center/newgw/a/v2/members/login
     * <br>
     * HEADER : {User-Agent=Android-dev/7.0 DCA/0.5.1, Content-Type=application/json}
     * <br>
     * BODY :  {"client_timezone" : "09:00","password":"201704014","login_id":"201704014"}
     * <br><br><br>
     *
     * @param login_id 로그인 ID(사번)
     * @param password 패스워드
     * @param callback 콜백
     */
    void requestMembersLogin(@NonNull Context context, @NonNull String login_id, @NonNull String password, @Nullable HanwhaNetworkCallback callback);

    /**
     * 간편 로그인
     * <p>
     * <b>Sample</b><br>
     * Request URL : https://qtalk.dreamplus.center/newgw/a/v2/members/simplelogin
     * <br>
     * HEADER : {User-Agent=Android-dev/7.0 DCA/0.5.1, Content-Type=application/json}
     * <br>
     * BODY :   {"client_timezone" : "09:00","login_id":"201704014","authcode":"b6c65dc9505f27eb5dd219fc299f4b5029f834eebfe490ebf8342ab4d3970f7b"}
     * <br><br><br>
     *
     * @param login_id    로그인 ID(사번)
     * @param encAuthcode 암호화된 간편 로그인 패스워드
     * @param callback    콜백
     */
    void requestMembersSimpleLogin(@NonNull Context context, @NonNull String login_id, @NonNull String encAuthcode, @Nullable HanwhaNetworkCallback callback);

    /**
     * 간편 로그인 설정
     * <p>
     * <b>Sample</b><br>
     * Request URL : https://qtalk-dev.dreamplus.center/newgw/mobile/Members/updateAuthcode.api
     * <br>
     * HEADER : {User-Agent=Android-dev/7.0 DCA/0.5.1, Content-Type=application/json}
     * <br>
     * BODY : {"encryption_member_id":"Oe+Y\/1wLWImqigM+TWXHbQ==","login_id":"201704014","authcode":"111111"}
     * <br><br><br>
     *
     * @param login_id 로그인 ID(사번)
     * @param authcode 간편 로그인 패스워드
     * @param callback 콜백
     */
    void requestMembersUpdateAuthcode(@NonNull Context context, @NonNull String login_id, @NonNull String authcode, @NonNull String encryption_member_id, @Nullable HanwhaNetworkCallback callback);

    /**
     * Project에 속한 Member 목록
     * <p>
     * <b>Sample</b><br>
     * Request URL : https://qtalk-dev.dreamplus.center/newgw/a/v2/members/get/all
     * <br>
     * HEADER : {User-Agent=Android-dev/7.0 DCA/0.5.1, Content-Type=application/json}
     * <br>
     * BODY : {"encryption_member_id":"Oe+Y\/1wLWImqigM+TWXHbQ=="}
     * <br><br><br>
     *
     * @param encryption_member_id 암호화된 멤버 ID
     * @param callback             콜백
     */
    void requestMemberAll(@NonNull Context context, @NonNull String encryption_member_id, @Nullable HanwhaNetworkCallback callback);


    /**
     * 전체 알림 On / Off 상태 변경
     * <p>
     * <p>
     * <b>Sample</b><br>
     * Request URL : https://qtalk.dreamplus.center/newgw/a/v2/members/crud/notifications/switch
     * <br>
     * HEADER : {User-Agent=Android-dev/7.0 DCA/0.5.1, Content-Type=application/json}
     * <br>
     * BODY : {"encryption_member_id":"Oe+Y\/1wLWImqigM+TWXHbQ==", "value":"0", "cmd":"U"}
     * <br><br><br>
     *
     * @param context              Context
     * @param encryption_member_id 암호화된 멤버 ID
     * @param onoff                Boolean
     * @param callback             콜백
     */
    void requestNotificationSet(@NonNull Context context, @NonNull String encryption_member_id, @NonNull boolean onoff, @Nullable HanwhaNetworkCallback callback);

    /**
     * 전체 알림 On / Off 상태 조회
     * <p>
     * <p>
     * <b>Sample</b><br>
     * Request URL : https://qtalk.dreamplus.center/newgw/a/v2/members/crud/notifications/switch
     * <br>
     * HEADER : {User-Agent=Android-dev/7.0 DCA/0.5.1, Content-Type=application/json}
     * <br>
     * BODY : {"encryption_member_id":"Oe+Y\/1wLWImqigM+TWXHbQ==", "value":"0", "cmd":"R"}
     * <br><br><br>
     *
     * @param context              Context
     * @param encryption_member_id 암호화된 멤버 ID
     * @param callback             콜백
     */
    void requestNotificationStatus(@NonNull Context context, @NonNull String encryption_member_id, @Nullable HanwhaNetworkCallback callback);

    /**
     * 푸쉬(알림) 목록
     * <p>
     * <b>Sample</b><br>
     * Request URL :  https://qtalk.dreamplus.center/newgw/a/v2/members/get/notifications/page
     * <br>
     * HEADER : {User-Agent=Android-dev/7.0 DCA/0.5.1, Content-Type=application/json}
     * <br>
     * BODY :    {"encryption_member_id":"Oe+Y\/1wLWImqigM+TWXHbQ==", "current_page_no":2, "records_per_page":5}
     * <br><br><br>
     *
     * @param context              Context
     * @param encryption_member_id 암호화된 멤버 ID
     * @param page                 PAGE
     * @param callback             콜백
     */
    void requestNotificationList(@NonNull Context context, @NonNull String encryption_member_id, @NonNull int page, @Nullable HanwhaNetworkCallback callback);

    /**
     * 푸쉬 확인
     * <p>
     * <b>Sample</b><br>
     * Request URL : https://qtalk.dreamplus.center/newgw/a/v2/members/confirm/notifications
     * <br>
     * HEADER : {User-Agent=Android-dev/7.0 DCA/0.5.1, Content-Type=application/json}
     * <br>
     * BODY :   { "task_id": 1201,  "project_id": null, "track_id": null, "group_id": 125, // 필수 "encryption_member_id":"MZLxLGTm11OmTOKb+4fa2g==" }
     * <br><br><br>
     *
     * @param context              Context
     * @param encryption_member_id 암호화된 멤버 ID
     * @param group_id             노티 그룹 아이디
     * @param task_id              Task ID (Optional)
     * @param project_id           Project ID (Optional)
     * @param track_id             Track ID (Optional)
     * @param callback             콜백
     */
    void requestNotificationOpen(@NonNull Context context, @NonNull String encryption_member_id,
                                 @Nullable int group_id,
                                 @Nullable int task_id,
                                 @Nullable int project_id,
                                 @Nullable int track_id,
                                 @Nullable HanwhaNetworkCallback callback);

    /**
     * TASK 상세
     * <p>
     * <b>Sample</b><br>
     * Request URL : https://qtalk.dreamplus.center/newgw/a/v2/tasks/get/details
     * <br>
     * HEADER : {User-Agent=Android-dev/7.0 DCA/0.5.1, Content-Type=application/json}
     * <br>
     * BODY :   { "client_timezone" : "09:00", "task_id": 468, "project_id": 32, "track_id":"2", "encryption_member_id": "Oe+Y/1wLWImqigM+TWXHbQ==" }
     * <br><br><br>
     *
     * @param encryption_member_id
     * @param task_id
     * @param project_id
     * @param callback
     */
    void requestTasksGetDetails(@NonNull Context context,
                                @NonNull String encryption_member_id,
                                @NonNull int task_id,
                                @NonNull int project_id,
                                @Nullable HanwhaNetworkCallback callback);

    /**
     * TASK 생성
     * <p>
     * <b>Sample</b><br>
     * Request URL : https://qtalk-dev.dreamplus.center/newgw/a/v2/tasks/add/list
     * <br>
     * HEADER : {User-Agent=Android-dev/7.0 DCA/0.5.1, Content-Type=application/json}
     * <br>
     * BODY : { "due_to":"2017-11-17", "author_member_id":256, "task_name":"태그 테스트 - 3", "encryption_member_id":"ABUUnFHYCFfDHoFuxo7EwQ==", "listReqCampaigns": [{"campaign_id": 888}], "listReqTasksMemberInfo" : [{"member_id" : 263,"project_id" : 41,"track_id" : 18}], "description" : "안녕하세요 #Hi #반갑()하하하 #허허!"}
     * <br>
     * LAST UPDATE : 2018.2.21
     * <br><br>
     *
     * @param context              Context
     * @param author_member_id     멤버 ID
     * @param encryption_member_id 암호화된 멤버 ID
     * @param description          TASK 내용
     * @param due_to               기한 설정
     * @param listMemberId         받는 사람 정보
     * @param campaignData         Campaign Info
     * @param callback             콜백
     */
    void requestSendTask(@NonNull Context context,
                         @NonNull int author_member_id,
                         @NonNull String encryption_member_id,
                         @NonNull String description,
                         @NonNull String due_to,
                         @NonNull ArrayList<ReqMemberInfo> listMemberId,
                         @Nullable CampaignData campaignData,
                         @Nullable HanwhaNetworkCallback callback);

    /**
     * 댓글 - 댓글 목록 조회
     * <p>
     * <b>Sample</b><br>
     * Request URL : https://qtalk.dreamplus.center/newgw/a/v2/messages/get/page
     * <br>
     * HEADER : {User-Agent=Android-dev/7.0 DCA/0.5.1, Content-Type=application/json}
     * <br>
     * BODY : {"client_timezone" : "09:00", "current_page_no": 1, "task_id": 468, "records_per_page": 10, "encryption_member_id": "Oe+Y/1wLWImqigM+TWXHbQ==", "is_pinned": false}
     * <br><br><br>
     *
     * @param context              Context
     * @param encryption_member_id 암호화된 멤버 ID
     * @param task_id              TASK ID
     * @param current_page         현재 페이지
     * @param callback             콜백
     */
    void requestGetMessageList(@NonNull Context context,
                               @NonNull String encryption_member_id,
                               @NonNull int task_id,
                               @NonNull int current_page,
                               @Nullable HanwhaNetworkCallback callback);

    /**
     * 댓글 - 댓글 등록
     * <p>
     * <b>Sample</b><br>
     * Request URL : https://qtalk-dev.dreamplus.center/newgw/mobile/Messages/messages/add.api
     * <br>
     * HEADER : {User-Agent=Android-dev/7.0 DCA/0.5.1, Content-Type=application/json}
     * <br>
     * BODY : {"encryption_member_id":"Oe+Y\/1wLWImqigM+TWXHbQ==","is_pinned":false,"task_id":468,"type":1,"contents":"댓글 입력"}
     * <br><br><br>
     *
     * @param context              Context
     * @param encryption_member_id 암호화된 멤버 ID
     * @param task_id              TASK ID
     * @param contents             댓글 내용
     * @param callback             콜백
     */
    void requestAddMessage(@NonNull Context context,
                           @NonNull String encryption_member_id,
                           @NonNull int task_id,
                           @NonNull String contents,
                           @Nullable HanwhaNetworkCallback callback);

    /**
     * 댓글 - 댓글 삭제
     * <p>
     * <b>Sample</b><br>
     * Request URL : https://qtalk-dev.dreamplus.center/newgw/a/v2/messages/delete
     * <br>
     * HEADER : {User-Agent=Android-dev/7.0 DCA/0.5.1, Content-Type=application/json}
     * <br>
     * BODY : {"client_timezone" : "+09:00","encryption_member_id": "ABUUnFHYCFfDHoFuxo7EwQ==","id": 452}
     * <br><br><br>
     *
     * @param context              Context
     * @param encryption_member_id 암호화된 멤버 ID
     * @param id                   댓글 ID
     * @param callback             콜백
     */
    void requestDeleteMessage(@NonNull Context context,
                              @NonNull String encryption_member_id,
                              @NonNull int id,
                              @Nullable HanwhaNetworkCallback callback);

    /**
     * Task 검색
     * <p>
     * <b>Sample</b><br>
     * Request URL : https://qtalk.dreamplus.center/newgw/a/v2/tags/get/tasks
     * <br>
     * HEADER : {User-Agent=Android-dev/7.0 DCA/0.5.1, Content-Type=application/json}
     * <br>
     * BODY : {"client_timezone" : "09:00", "encryption_member_id": "Oe+Y/1wLWImqigM+TWXHbQ==", "searchTag": "테스트"}
     * <br><br><br>
     *
     * @param context              Context
     * @param encryption_member_id 암호화된 멤버 ID
     * @param searchTag            검색어(태그)
     * @param callback             콜백
     */
    void requestSearchTaskByTag(@NonNull Context context,
                                @NonNull String encryption_member_id,
                                @NonNull String searchTag,
                                @Nullable HanwhaNetworkCallback callback);

    /**
     * TASK 수정
     * <p>
     * <b>Sample</b><br>
     * Request URL : https://qtalk.dreamplus.center/newgw/a/v2/tasks/update
     * <br>
     * HEADER : {User-Agent=Android-dev/7.0 DCA/0.5.1, Content-Type=application/json}
     * <br>
     * BODY : {"author_member_id": 262, "encryption_member_id": "Oe+Y/1wLWImqigM+TWXHbQ==", "task_id": 249, "project_id": 32, "track_id":"2",
     * "due_to": "2017-11-18 08:59:59.0", "description": "안녕하세요 #Hi #반갑()하하하 #허허!", "status": 20, "task_name": "태그 테스트 - 1 : 수정", "evaluation": 0, "client_timezone" : "09:00"}
     * <br><br><br>
     *
     * @param context              Context
     * @param encryption_member_id 암호화된 멤버 ID
     * @param taskData             TASK 데이터
     * @param callback             콜백
     */
    void requestUpdateTask(@NonNull Context context,
                           @NonNull String encryption_member_id,
                           @NonNull TaskData taskData,
                           @Nullable CampaignData campaignData,
                           @Nullable HanwhaNetworkCallback callback);

    /**
     * TASK 삭제
     * <p>
     * <b>Sample</b><br>
     * Request URL : https://qtalk.dreamplus.center/newgw/a/v2/tasks/delete
     * <br>
     * HEADER : {User-Agent=Android-dev/7.0 DCA/0.5.1, Content-Type=application/json}
     * <br>
     * BODY : {"client_timezone" : "+09:00", "encryption_member_id": "Oe+Y/1wLWImqigM+TWXHbQ==", "author_member_id": 256, "task_id": 삭제할 task_id 를 입력해주세요, "project_id": 32, "track_id":"2", "member_id": 256}
     * <br><br><br>
     *
     * @param context              Context
     * @param data                 TASK 상세 데이터
     * @param encryption_member_id 암호화된 멤버 ID
     * @param callback             콜백
     */
    void requestTaskDelete(@NonNull Context context,
                           @NonNull TaskData data,
                           @NonNull String encryption_member_id,
                           @Nullable HanwhaNetworkCallback callback);

    /**
     * TASK 수락 (Status : 20)
     * <p>
     * <b>Sample</b><br>
     * request url : https://qtalk.dreamplus.center/newgw/a/v2/tasks/update/status/as
     * BODY : {"encryption_member_id": "Oe+Y/1wLWImqigM+TWXHbQ==","task_id": 249}
     * <br><br><br>
     *
     * @param context              Context
     * @param encryption_member_id 암호화된 멤버 ID
     * @param author_member_id     작성자 ID
     * @param task_id              TASK ID
     * @param callback             콜백
     */
    void requestTaskStatusAccept(@NonNull Context context,
                                 @NonNull String encryption_member_id,
                                 @NonNull int author_member_id,
                                 @NonNull int task_id,
                                 @Nullable HanwhaNetworkCallback callback);


    /**
     * TASK 요청 (Status : 30)
     * <p>
     * <b>Sample</b><br>
     * request url :  https://qtalk.dreamplus.center/newgw/a/v2/tasks/update/status/req
     * BODY : {"encryption_member_id": "Oe+Y/1wLWImqigM+TWXHbQ==","task_id": 249}
     * <br><br><br>
     *
     * @param context              Context
     * @param encryption_member_id 암호화된 멤버 ID
     * @param author_member_id     작성자 ID
     * @param task_id              TASK ID
     * @param callback             콜백
     */
    void requestTaskStatusRequest(@NonNull Context context,
                                  @NonNull String encryption_member_id,
                                  @NonNull int author_member_id,
                                  @NonNull int task_id,
                                  @Nullable HanwhaNetworkCallback callback);

    /**
     * TASK 요청반려 (Status : 40)
     * <p>
     * <b>Sample</b><br>
     * request url :  https://qtalk.dreamplus.center/newgw/a/v2/tasks/update/status/r2
     * <br>
     * HEADER : {User-Agent=Android-dev/7.0 DCA/0.5.1, Content-Type=application/json}
     * <br>
     * BODY : {"client_timezone" : "09:00", "author_member_id": 262,   "encryption_member_id": "Oe+Y/1wLWImqigM+TWXHbQ==", "task_id": 249,
     * "reqTasksMessageInfo": {"contents": "요청반려입니다", "is_pinned": false, "ref_message_id": 0, "type": 10}}
     * <br><br><br>
     *
     * @param context              Context
     * @param encryption_member_id 암호화된 멤버 ID
     * @param author_member_id     작성자 ID
     * @param task_id              TASK ID
     * @param message              반려 메세지
     * @param callback             콜백
     */
    void requestTaskStatusRejectedRequest(@NonNull Context context,
                                          @NonNull String encryption_member_id,
                                          @NonNull int author_member_id,
                                          @NonNull int task_id,
                                          @NonNull String message,
                                          @Nullable HanwhaNetworkCallback callback);

    /**
     * TASK 완료(평가) (Status : 60)
     * <p>
     * <b>Sample</b><br>
     * request url :  https://qtalk.dreamplus.center/newgw/a/v2/tasks/update/status/rst
     * BODY : {"encryption_member_id": "Oe+Y/1wLWImqigM+TWXHbQ==","task_id": 249}
     * <br><br><br>
     *
     * @param context              Context
     * @param encryption_member_id 암호화된 멤버 ID
     * @param author_member_id     작성자 ID
     * @param task_id              TASK ID
     * @param taskEvaluationType   평가
     * @param callback             콜백
     */
    void requestTaskStatusEvaluated(@NonNull Context context,
                                    @NonNull String encryption_member_id,
                                    @NonNull int author_member_id,
                                    @NonNull int task_id,
                                    @NonNull TaskEvaluationType taskEvaluationType,
                                    @Nullable HanwhaNetworkCallback callback);

    /**
     * TASK 완료(평가) 반려 (Status : 70)
     * <p>
     * <b>Sample</b><br>
     * request url :  https://qtalk.dreamplus.center/newgw/a/v2/tasks/update/status/re
     * BODY : {"encryption_member_id": "Oe+Y/1wLWImqigM+TWXHbQ==","task_id": 249}
     * <br><br><br>
     *
     * @param context              Context
     * @param encryption_member_id 암호화된 멤버 ID
     * @param author_member_id     작성자 ID
     * @param task_id              TASK ID
     * @param message              반려 메세지
     * @param callback             콜백
     */
    void requestTaskStatusRejectedEvaluation(@NonNull Context context,
                                             @NonNull String encryption_member_id,
                                             @NonNull int author_member_id,
                                             @NonNull int task_id,
                                             @NonNull String message,
                                             @Nullable HanwhaNetworkCallback callback);

    /**
     * TASK 완료 / 취소 (Status : 80)
     * <p>
     * <b>Sample</b><br>
     * request url : https://qtalk.dreamplus.center/newgw/a/v2/tasks/update/status/cs
     * BODY : {"encryption_member_id": "Oe+Y/1wLWImqigM+TWXHbQ==","task_id": 249}
     * <br><br><br>
     *
     * @param context              Context
     * @param encryption_member_id 암호화된 멤버 ID
     * @param author_member_id     작성자 ID
     * @param task_id              TASK ID
     * @param callback             콜백
     */
    void requestTaskStatusClosed(@NonNull Context context,
                                 @NonNull String encryption_member_id,
                                 @NonNull int author_member_id,
                                 @NonNull int task_id,
                                 @Nullable HanwhaNetworkCallback callback);

    /**
     * TASK - 오늘 할일 등록 / 취소
     * <p>
     * <b>Sample</b><br>
     * Request URL : https://qtalk.dreamplus.center/newgw/a/v2/tasks/update/today
     * <br>
     * HEADER : {User-Agent=Android-dev/7.0 DCA/0.5.1, Content-Type=application/json}
     * <br>
     * BODY : {"client_timezone" : "09:00", "is_today": true, "encryption_member_id": "Oe+Y/1wLWImqigM+TWXHbQ==", "author_member_id": 256, "task_id": 315, "project_id": 32, "track_id":"2"}
     * <br><br><br>
     *
     * @param data                 Task 데이터
     * @param encryption_member_id 암호화된 멤버 ID
     * @param callback             콜백
     */
    void requestTasksUpdateToday(@NonNull Context context,
                                 @NonNull TaskData data,
                                 @NonNull String encryption_member_id,
                                 @Nullable HanwhaNetworkCallback callback);

    /**
     * Campaign 목록 조회(프로젝트 ID 기준)
     * <p>
     * <b>Sample</b><br>
     * Request URL : https://qtalk-dev.dreamplus.center/newgw/a/v2/projects/get/campaigns
     * <br>
     * HEADER : {User-Agent=Android-dev/7.0 DCA/0.5.1, Content-Type=application/json}
     * <br>
     * BODY : {"client_timezone" : "+09:00", "encryption_member_id": "Oe+Y/1wLWImqigM+TWXHbQ==", "listReqProjectId":[40, 41]}
     * {client_timezone" : "09:00", encryption_member_id": "Oe+Y/1wLWImqigM+TWXHbQ==", search_text": "청소" }
     * <br><br><br>
     *
     * @param context              Context
     * @param encryption_member_id 암호화된 멤버 ID
     * @param listReqProjectId     프로젝트 ID 배열
     * @param callback             CALLBACK
     */
    void requestCampaignListByProjectId(@NonNull Context context,
                                        @NonNull String encryption_member_id,
                                        @NonNull ArrayList<Integer> listReqProjectId,
                                        @Nullable HanwhaNetworkCallback callback);

    /**
     * Campaign 목록 조회(멤버 ID 기준)
     * <p>
     * <b>Sample</b><br>
     * Request URL : https://qtalk-dev.dreamplus.center/newgw/a/v2/members/get/campaigns
     * <br>
     * HEADER : {User-Agent=Android-dev/7.0 DCA/0.5.1, Content-Type=application/json}
     * <br>
     * BODY : {"client_timezone" : "+09:00", "encryption_member_id": "Oe+Y/1wLWImqigM+TWXHbQ==", "listMemberInfo":[256]}
     * {client_timezone" : "09:00", encryption_member_id": "Oe+Y/1wLWImqigM+TWXHbQ==", search_text": "청소" }
     * <br><br><br>
     *
     * @param context              Context
     * @param encryption_member_id 암호화된 멤버 ID
     * @param listMemberInfo       멤버 ID 배열
     * @param callback             CALLBACK
     */
    void requestCampaignListByMemberId(@NonNull Context context,
                                       @NonNull String encryption_member_id,
                                       @NonNull ArrayList<Integer> listMemberInfo,
                                       @Nullable HanwhaNetworkCallback callback);


    /**
     * Campaign 목록 조회(프로젝트 ID 기준)
     * <p>
     * <b>Sample</b><br>
     * Request URL : https://qtalk-dev.dreamplus.center/newgw/a/v2/projects/get/dab
     * <br>
     * HEADER : {User-Agent=Android-dev/7.0 DCA/0.5.1, Content-Type=application/json}
     * <br>
     * BODY : {"client_timezone" : "+09:00", {"encryption_member_id":"MZLxLGTm11OmTOKb+4fa2g=="}}
     * {client_timezone" : "09:00", encryption_member_id": "Oe+Y/1wLWImqigM+TWXHbQ==", search_text": "청소" }
     * <br><br><br>
     *
     * @param context              Context
     * @param encryption_member_id 암호화된 멤버 ID
     * @param callback             CALLBACK
     */
    void requestDashboardList(@NonNull Context context,
                              @NonNull String encryption_member_id,
                              @Nullable HanwhaNetworkCallback callback);

}
