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

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

import java.util.ArrayList;

import kr.co.hanwha.hifive.base.BaseDataSource;
import kr.co.hanwha.hifive.data.model.CrudDataRoot;
import kr.co.hanwha.hifive.data.model.LoginData;
import kr.co.hanwha.hifive.data.model.ProjectInfoData;
import kr.co.hanwha.hifive.network.hanwha.HanwhaNetworkCallback;

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

public interface MemberDataSource extends BaseDataSource {
    /**
     * 암호화된 멤버 고유번호
     *
     * @return String
     */
    String getEncryptionMemberId();

    /**
     * 멤버 아이디 비교
     *
     * @param member_id 멤버 고유 번호
     * @return Boolean
     */
    boolean isMember(int member_id);

    /**
     * 멤버 고유 번호
     *
     * @return Integer
     */
    int getMemberId();

    /**
     * 멤버 로그인 ID
     *
     * @return String(email)
     */
    String getLogin();

    /**
     * 멤버 이름
     *
     * @return String
     */
    String getMemberName();

    /**
     * 내가 속한 프로젝트인지 확인
     *
     * @param project_id 프로젝트 ID
     * @return Boolean
     */
    boolean checkProjectId(@NonNull int project_id);

    /**
     * 소속된 프로젝트중 캡틴인 프로젝트가 있는지 확인
     *
     * @return Boolean
     */
    boolean isCaptain();

    /**
     * 캡틴인 프로젝트 정보
     *
     * @return Array
     */
    ArrayList<ProjectInfoData> getCaptainProjectInfo();

    /**
     * 내가 속한 프로젝트 ID 목록
     *
     * @return ArrayList
     */
    ArrayList<Integer> getMyProjectList();

    /**
     * 계정 로그인
     *
     * @param context   Context
     * @param member_id 멤버계정
     * @param password  패스워드
     * @param callback  콜백
     */
    void doAccountLogin(@NonNull Context context, @NonNull String member_id, @NonNull String password,
                        @NonNull HanwhaNetworkCallback<LoginData> callback);

    /**
     * 간편 로그인
     *
     * @param context  Context
     * @param login_id 로그인 ID
     * @param authcode 간편 로그인 패스워드
     * @param callback 콜백
     */
    void doSimpleLogin(@NonNull Context context, @NonNull String login_id,
                       @NonNull String authcode,
                       @NonNull HanwhaNetworkCallback callback);

    /**
     * 로그인 성공 후 처리 -> 기기등록
     *
     * @param context  Context
     * @param response LoginData
     * @param callback 콜백
     */

    void doSuccessLogin(@NonNull Context context, @Nullable LoginData response,
                        @NonNull HanwhaNetworkCallback<LoginData> callback);

    /**
     * 간편 로그인 설정
     *
     * @param context  Context
     * @param authcode 간편 로그인 비밀번호(6자리 숫자)
     * @param callback 콜백
     */
    void updateAuthcode(@NonNull Context context,
                        @NonNull String authcode,
                        @NonNull HanwhaNetworkCallback callback);

    /**
     * 토큰 등록
     *
     * @param context    Context
     * @param token      푸쉬 토큰
     * @param device_uid 디바이스 UUID
     * @param callback   콜백
     */
    void updateDeviceToken(@NonNull Context context,
                           @NonNull String token,
                           @NonNull String device_uid,
                           @NonNull HanwhaNetworkCallback callback);

    /**
     * @param context  Context
     * @param callback 콜백
     */
    void getNotificationStatus(@NonNull Context context,
                               @NonNull HanwhaNetworkCallback<CrudDataRoot> callback);

    /**
     * @param context  Context
     * @param onoff    알림 On / Off
     * @param callback 콜백
     */
    void setNotificationStatus(@NonNull Context context,
                               @NonNull boolean onoff,
                               @NonNull HanwhaNetworkCallback<CrudDataRoot> callback);
}
