content: /*
   * Created by LuaView.
   * Copyright (c) 2017, Alibaba Group. All rights reserved.
   *
   * This source code is licensed under the MIT.
   * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
   */
  
  package com.taobao.luaview.userdata.ui;
  
  import com.taobao.luaview.util.DimenUtil;
  import com.taobao.luaview.util.LuaUtil;
  import com.taobao.luaview.util.LuaViewUtil;
  import com.taobao.luaview.view.LVViewPager;
  
  import org.luaj.vm2.Globals;
  import org.luaj.vm2.Lua;
  import org.luaj.vm2.LuaValue;
  import org.luaj.vm2.Varargs;
  
  
  /**
   * 容器类-ViewPager
   *
   * @author song
   * @date 15/8/20
   */
  public class UDViewPager extends UDViewGroup<LVViewPager> {
      private LuaValue mViewPagerIndicator = NIL;
      //初始化数据
      private LuaValue mPagesDelegate = NIL;
  
      public UDViewPager(LVViewPager viewPager, Globals globals, LuaValue metaTable, Varargs initParams) {
          super(viewPager, globals, metaTable, initParams);
          init();
      }
  
      public void init() {
          if (initParams != null) {
              this.mPagesDelegate = LuaUtil.getValue(initParams, NIL, "Pages");
              this.mCallback = LuaUtil.getValue(initParams, NIL, "Callback");
          }
      }
  
      public UDViewPager reload() {
          final LVViewPager viewPager = getView();
          if (viewPager != null) {
              init();
              if (viewPager.getAdapter() != null) {
                  viewPager.getAdapter().notifyDataSetChanged();
              }
          }
          return this;
      }
  
      /**
       * get number of pages
       *
       * @return
       */
      public int getPageCount() {
          return LuaUtil.getOrCallFunction(LuaUtil.getValue(initParams, NIL, "PageCount")).optint(1, 0);
      }
  
      /**
       * get page title
       *
       * @param position
       * @return
       */
      public String getPageTitle(int position) {
          if (!mPagesDelegate.isnil()) {
              return LuaUtil.callFunction(mPagesDelegate.get("Title"), LuaUtil.toLuaInt(position)).optjstring("");
          }
          return "";
      }
  
      /**
       * 有page改变的监听器
       *
       * @return
       */
      public boolean hasPageChangeListeners() {
          return !mCallback.isnil();
      }
  
      /**
       * 调用 Init 方法
       *
       * @param page
       * @param position
       * @return
       */
      public LuaValue callPageInit(LuaValue page, int position) {
          return callPageFunction("Init", page, position);//Lua从1开始
      }
  
      /**
       * 调用 Layout 方法
       *
       * @param page
       * @param position
       * @return
       */
      public LuaValue callPageLayout(LuaValue page, int position) {
          return callPageFunction("Layout", page, position);
      }
  
  
      /**
       * 调用 Page的某些方法
       *
       * @param method
       * @param page
       * @param position
       * @return
       */
      private LuaValue callPageFunction(String method, LuaValue page, int position) {
          if (!mPagesDelegate.isnil()) {
              return LuaUtil.callFunction(mPagesDelegate.get(method), page, LuaUtil.toLuaInt(position));
          }
          return NIL;
      }
  
      /**
       * 调用PageChange对应的方法
       *
       * @param position 从1开始
       * @param distance
       * @return
       */
      public UDViewPager callPageCallbackScrolling(int position, float percent, float distance) {
          if (!mCallback.isnil()) {
              LuaUtil.callFunction(LuaUtil.getFunction(mCallback, "Scrolling", "scrolling"), LuaUtil.toLuaInt(position), valueOf(percent), valueOf(distance));
          }
          return this;
      }
  
      /**
       * 调用PageChange对应的方法
       *
       * @return
       */
      public UDViewPager callPageCallbackScrollBegin(int currentItem) {
          if (!mCallback.isnil()) {
              LuaUtil.callFunction(LuaUtil.getFunction(mCallback, "ScrollBegin", "scrollBegin"), LuaUtil.toLuaInt(currentItem));
          }
          return this;
      }
  
      /**
       * 调用PageChange对应的方法
       *
       * @param position 从1开始
       * @return
       */
      public UDViewPager callPageCallbackScrollEnd(Integer position) {
          if (!mCallback.isnil()) {
              LuaUtil.callFunction(LuaUtil.getFunction(mCallback, "ScrollEnd", "scrollEnd"), LuaUtil.toLuaInt(position));
          }
          return this;
      }
  
      /**
       * 调用StateChanged对应的方法
       *
       * @param stateChanged 从1开始
       * @return
       */
      public UDViewPager callPageCallbackStateChanged(int stateChanged) {
          if (!mCallback.isnil()) {
              LuaUtil.callFunction(LuaUtil.getFunction(mCallback, "StateChanged", "stateChanged"), LuaUtil.toLuaInt(stateChanged));
          }
          return this;
      }
  
      /**
       * 设置当前页面
       *
       * @param item
       * @return
       */
      public UDViewPager setCurrentItem(final int item, final boolean smoothScroll) {
          if (item >= 0 && getView() != null) {
              getView().setCurrentItem(item, smoothScroll);
          }
          return this;
      }
  
      /**
       * 当前 item
       *
       * @return
       */
      public int getCurrentItem() {
          return getView() != null ? getView().getCurrentItem() : 0;
      }
  
      /**
       * 设置view pager indicator
       *
       * @param indicator
       * @return
       */
      public UDViewPager setViewPagerIndicator(LuaValue indicator) {
          final LVViewPager viewPager = getView();
          if (viewPager != null) {
              mViewPagerIndicator = indicator;
              viewPager.setViewPagerIndicator(indicator);
          }
          return this;
      }
  
      /**
       * 得到indicator
       *
       * @return
       */
      public LuaValue getViewPagerIndicator() {
          return mViewPagerIndicator;
      }
  
      /**
       * 自动滚动
       */
      public LuaValue setAutoScroll(int interval, boolean reverseDirection) {
          final LVViewPager viewPager = getView();
          if (viewPager != null) {
              if (interval > 0) {
                  viewPager.setCanAutoScroll(true);
                  viewPager.setStopScrollWhenTouch(true);
                  viewPager.setReverseDirection(reverseDirection);
                  viewPager.setInterval(interval);
                  viewPager.startAutoScroll();
              } else {
                  viewPager.setCanAutoScroll(false);
                  viewPager.setStopScrollWhenTouch(false);
                  viewPager.stopAutoScroll();
              }
          }
          return this;
      }
  
      /**
       * 设置是否循环
       *
       * @param looping
       * @return
       */
      public LuaValue setLooping(boolean looping) {
          final LVViewPager viewPager = getView();
          if (viewPager != null) {
              viewPager.setLooping(looping);
          }
          return this;
      }
  
      /**
       * 是否循环滚动
       *
       * @return
       */
      public boolean isLooping() {
          return getView() != null && getView().isLooping();
      }
  
      /**
       * 支持左右透出预览
       */
      public LuaValue previewSide(int left, int right) {
          final LVViewPager viewPager = getView();
          if (viewPager != null) {
              viewPager.setClipToPadding(false);
              viewPager.setPadding(DimenUtil.dpiToPx(left), 0, DimenUtil.dpiToPx(right), 0);
          }
          return this;
      }
  }
  