/*
 * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
 */
package kr.co.zumo.app.lifeplus.view.custom.auth;

import android.support.annotation.StringRes;

import kr.co.zumo.app.lifeplus.view.Event;

/**
 * IMobileAuthContract
 * <pre>
 * </pre>
 *
 * @author 민효동
 * @version 1.0
 * @history 민효동   [2018. 10. 4.]   [최초 작성]
 * @since 2018. 10. 4.
 */
public interface IMobileAuthContract {
  interface View {
    /**
     * Presenter 지정
     *
     * @param presenter
     */
    void setPresenter(IMobileAuthContract.Presenter presenter);

    /**
     * hide key board
     */
    void doHideKeyBoard();

    /**
     * clear validation name textView
     */
    void doClearNameValidationTextView();

    /**
     * name validation check
     *
     * @param StringId
     */
    void doNameValidationMessage(int StringId);

    /**
     * clear validation birthDate textView
     */
    void doClearBirthDateValidationTextView();

    /**
     * birthDate validation message
     */
    void doBirthDateValidationMessage(int StringId);

    /**
     * clear validation Phone Number textView
     */
    void doClearPhoneNumberValidationTextView();

    /**
     * Phone Number validation check
     *
     * @param stringId
     */
    void doPhoneNumberCheckedValidationMessage(int stringId);


    /**
     * 인증 정보 입력 UI 활성/비활성 시킴
     *
     * @param isEnabled
     */
    void setEnabledRequestNumberButton(boolean isEnabled);

    /**
     * 재 발송 버튼 활성 카운트
     *
     * @param str
     */
    void renderRetryButton(String str);

    /**
     * 인증번호 validation check
     *
     * @param stringId
     */
    void doAuthorizedNumberValidationMessage(@StringRes int stringId);

    /**
     * clear validation Authorized Number textView
     */
    void doClearAuthorizedNumberValidationTextView();

    /**
     * 남은 시간 레이아웃 표시하기;
     */
    void showRemainTime(boolean isVisible);

    /**
     * 남은 시간 표시
     *
     * @param time
     */
    void renderRemainTime(String time);

    /**
     * 시간 연장 버튼 활성/비활성
     *
     * @param isEnabled
     */
    void setEnabledExpansionTimeButton(boolean isEnabled);

    /**
     * 인증 번호 확인 버튼 활성/비활성
     *
     * @param isEnabled
     */
    void setEnabledRequestConfirmButton(boolean isEnabled);

    /**
     * 인즌 번호 입력 필드 활성/비활성
     *
     * @param isEnabled
     */
    void setEnabledRequestConfirmTextView(boolean isEnabled);

    /**
     * 인증 번호 입력 칸 클리어
     */
    void doClearRequestConfirmTextView();

    /**
     * 동의하기 아코디언 구성
     */
    void doAccordionAgreeList(boolean isVisible);

    /**
     * 모든 포커스 제거
     */
    void clearFocusAll();

    /**
     * 모든 UI disabled
     */
    void setDisabledAll();

    void dispose();
  }

  interface Presenter {
    /**
     * 레이아웃 터치 시
     */
    void onClickLayout();

    /**
     * 동의하기 아코디언 구성
     */
    void doAccordionAgreeList(boolean isVisible);

    /**
     * name 필드의 입력시 호출
     *
     * @param inputName
     */
    void onNameTextChanged(String inputName);

    /**
     * 이름 입력 칸에 포커스 in/out
     *
     * @param isFocusChanged
     */
    void onFocusNameText(boolean isFocusChanged);

    /**
     * 생년월일 입력시 호출
     *
     * @param inputBirthDate
     */
    void onBirthDateTextChanged(String inputBirthDate);

    /**
     * 생일 입력 칸에 포커스 in/out
     *
     * @param isFocusChanged
     */
    void onFocusBirthDateText(boolean isFocusChanged);

    /**
     * 휴대전화 뒤 7-8자리 입력시 호출
     *
     * @param phoneNumber
     */
    void onPhoneNumberTextChanged(String phoneNumber);

    /**
     * 폰 번호 입력 칸에 포커스 in/out
     *
     * @param isFocusChanged
     */
    void onFocusPhoneNumberText(boolean isFocusChanged);

    /**
     * default 선택 값 남자의 체크유무 판별 후 성별 체크
     *
     * @param isMale
     */
    void setOnGenderCheckedChanged(boolean isMale);

    /**
     * default 선택 값 내국인의 체크유무 판별 후 국적 체크
     *
     * @param isLocal
     */
    void onNationalCheckedChanged(boolean isLocal);

    /**
     * 핸드폰 번호 앞자리 spinner 선택시 호출
     *
     * @param firstPhoneNumber
     */
    void onFirstPhoneNumberSelectChanged(String firstPhoneNumber);

    /**
     * 핸드폰 번호 앞자리 spinner 열림/닫힘
     *
     * @param isOpened
     */
    void onFirstPhoneNumberOpenChanged(boolean isOpened);

    /**
     * 통신사 spinner 선택시 호출
     *
     * @param mobileCompany
     */
    void onFirstMobileCompanySelectChanged(String mobileCompany);

    /**
     * 핸드폰 번호 앞자리 spinner 열림/닫힘
     *
     * @param isOpened
     */
    void onFirstMobileCompanyOpenChanged(boolean isOpened);
    /**
     * 전체동의 체크 버튼 클릭시 호출
     *
     * @param isChecked
     */
    void onAllAgreeCheckedChanged(boolean isChecked);

    /**
     * 동의 체크
     *
     * @param index
     * @param isChecked
     */
    void onAgreeCheckedChanged(int index, boolean isChecked);

    /**
     * 인증번호 입력 칸에 포커스
     *
     * @param isFocusChanged
     */
    void onFocusValidationNumberText(boolean isFocusChanged);

    /**
     * 인증번호 6자리 입력시 호출
     *
     * @param authorizedNumber
     */
    void onAuthorizedNumberChanged(String authorizedNumber);

    /**
     * 인증 확인 버튼 클릭, 인증 번호 확인 후 가입 완료.
     */
    void onAuthorizationConfirmButtonClick();

    /**
     * 인증번호 시간 지연 버튼 클릭
     */
    void onAuthorizationTimeExpansionButtonClick();

    /**
     * 동의 세부 정보 보기 눌렀을 때
     *
     * @param index
     */
    void onClickAgreeDetail(int index);

    /**
     * 인증번호 발송 버튼 클릭, 인증 번호 발송 전 user 정보 data 준비.
     */
    void onAuthorizationNumberSendButtonClick();

    void dispose();
  }

  interface Listener {
    /**
     * 인증 결과 전달
     *
     * @param event
     */
    void onAuthResult(Event event);
  }
}
