package kr.co.hanwha.hifive.screen.intro.contract;

import android.content.Intent;
import android.support.annotation.NonNull;

import kr.co.hanwha.hifive.base.BasePresenter;
import kr.co.hanwha.hifive.base.BaseView;
import kr.co.hanwha.hifive.data.model.LoginData;
import kr.co.hanwha.hifive.data.model.NoticeData;
import kr.co.hanwha.hifive.data.model.UpdateData;

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

public interface IntroContract {
    interface View extends BaseView<Presenter> {
        void initLayout();

        void initPresenter();

        void initCallback();

        /**
         * 에러 메세지 표시 - 간편 로그인
         *
         * @param message
         */
        void showAlertSimpleMessage(String message);

        /**
         * 에러 메세지 표시 - 계정 로그인
         *
         * @param message
         */
        void showAlertAccountMessage(String message);

        /**
         * Icon Animation
         */
        void playLogoAnimation();

        /**
         * 간편 로그인
         */
        void showSimpleLogin();

        /**
         * 아이디 / 패스워드 로그인
         */
        void showAccountLogin();
    }

    interface Presenter extends BasePresenter {
        /**
         * Notification 확인
         *
         * @param intent Intent
         */
        void checkLanding(Intent intent);

        /**
         * 버전 확인
         */
        void checkUpdate();

        /**
         * 로그인
         */
        void showLoginView(@NonNull UpdateData response);

        /**
         * 업데이트 확인 팝업
         */
        void showUpdateAlert();

        /**
         * 공지사항 확인
         *
         * @param updateData 업데이터 데이터
         * @return Notice Data
         */
        NoticeData checkNotice(@NonNull UpdateData updateData);

        /**
         * 업데이트
         */
        void doUpdate();

        /**
         * Permission 필요 알림
         */
        void showPermissionAlert();

        /**
         * 계정 로그인
         *
         * @param member_id 아이디
         * @param password  패스워드
         */
        void doAccountLogin(@NonNull String member_id, @NonNull String password);

        /**
         * 간편 로그인
         *
         * @param authcode 간편로그인 패스워드
         */
        void doSimpleLogin(@NonNull String authcode);

        /**
         * 명언 목록 조회
         *
         * @param needSetSimpleLogin Boolean
         */
        void getMaximList(@NonNull boolean needSetSimpleLogin);

        /**
         * 메인 시작
         *
         * @param needSetSimpleLogin Boolean
         */
        void startMain(@NonNull boolean needSetSimpleLogin);

        /**
         * 회원가입
         */
        void doSignUp();

        /**
         * 소속 선택
         */
        void doSelectDepartment();

        /**
         * 비밀번호 유효기간 만료 체크
         * @param response 로그인 response
         */
        void checkExpiredAccount(@NonNull LoginData response);
    }
}
