/** Created by vinoth on 10/26/15. */
public class ChangePasswordAsyncTask extends AsyncTask<String, Void, CommonResponse> {

  private static final LogTracer LOG_TRACER = LogTracer.instance(ChangePasswordAsyncTask.class);
  public static final String SUCCESS_DATA = "success_data";
  public static final String ERROR_DATA = "error_data";
  private Context mContext;
  private Handler mHandler;
  private Message mMessage;
  private Bundle mBundle;

  public ChangePasswordAsyncTask(Context context, Handler handler) {
    super();
    this.mContext = context;
    this.mHandler = handler;
    this.mMessage = new Message();
    this.mBundle = new Bundle();
    this.mMessage.setData(mBundle);
  }

  @Override
  protected void onPreExecute() {
    super.onPreExecute();
  }

  @Override
  protected void onPostExecute(CommonResponse commonResponse) {
    super.onPostExecute(commonResponse);
  }

  @Override
  protected CommonResponse doInBackground(String... params) {
    User user = SettingsUtils.getUserInfo(mContext);
    try {
      CommonResponse commonResponse = null;
      commonResponse =
          DrBondPromotionREST.changePassword(user.getCompany_Code(), user.getUser_Id(), params[0]);
      if (commonResponse.isTransaction_Status()) {
        user.setPassword(params[0]);
        SettingsUtils.setUserInfo(mContext, user);
        mBundle.putSerializable(SUCCESS_DATA, commonResponse);
        mHandler.sendMessage(mMessage);
      } else {
        mBundle.putSerializable(ERROR_DATA, commonResponse.getMessage_To_Display());
        mHandler.sendMessage(mMessage);
      }
      return commonResponse;
    } catch (Exception e) {
      LOG_TRACER.e(e);
      mBundle.putSerializable(ERROR_DATA, e.getMessage());
      mHandler.sendMessage(mMessage);
    }
    return null;
  }
}
 @Override
 protected CommonResponse doInBackground(String... params) {
   User user = SettingsUtils.getUserInfo(mContext);
   try {
     CommonResponse commonResponse = null;
     commonResponse =
         DrBondPromotionREST.changePassword(user.getCompany_Code(), user.getUser_Id(), params[0]);
     if (commonResponse.isTransaction_Status()) {
       user.setPassword(params[0]);
       SettingsUtils.setUserInfo(mContext, user);
       mBundle.putSerializable(SUCCESS_DATA, commonResponse);
       mHandler.sendMessage(mMessage);
     } else {
       mBundle.putSerializable(ERROR_DATA, commonResponse.getMessage_To_Display());
       mHandler.sendMessage(mMessage);
     }
     return commonResponse;
   } catch (Exception e) {
     LOG_TRACER.e(e);
     mBundle.putSerializable(ERROR_DATA, e.getMessage());
     mHandler.sendMessage(mMessage);
   }
   return null;
 }
        @Override
        public void handleMessage(Message msg) {
          super.handleMessage(msg);
          mActivity.hideLoader();
          if (msg.getData().containsKey(RecentDoctorsAsyncTask.SUCCESS_DATA)) {
            Object[] objects =
                (Object[]) msg.getData().getSerializable(RecentDoctorsAsyncTask.SUCCESS_DATA);
            Doctor[] doctors = Arrays.copyOf(objects, objects.length, Doctor[].class);
            mDoctors = new ArrayList<Doctor>(Arrays.asList(doctors));
            Collections.sort(
                mDoctors,
                new Comparator<Doctor>() {
                  @Override
                  public int compare(Doctor doctor, Doctor t1) {
                    return doctor.getDisplayName().compareToIgnoreCase(t1.getDisplayName());
                  }
                });
            if (mRecyclerAdapter != null) {
              mRecyclerAdapter.addAll(mDoctors);
              mRecyclerAdapter.notifyDataSetChanged();
            } else {
              mRecyclerAdapter =
                  new AllDoctorsRecyclerAdapter(AllDoctorsFragment.this.getActivity(), mDoctors);
              mRecyclerAdapter.setEmptyView(mErrorMsg);
              mRecyclerView.setLayoutManager(
                  new LinearLayoutManager(AllDoctorsFragment.this.getActivity()));
              final DividerDecoration divider =
                  new DividerDecoration.Builder(AllDoctorsFragment.this.getActivity())
                      .setHeight(R.dimen.default_divider_height)
                      .setPadding(R.dimen.default_divider_padding)
                      .setColorResource(R.color.default_header_color)
                      .build();

              mRecyclerView.setHasFixedSize(true);
              mRecyclerView.setLayoutManager(
                  new LinearLayoutManager(AllDoctorsFragment.this.getActivity()));
              // mRecyclerView.addItemDecoration(divider);

              decor = new StickyHeaderDecoration(mRecyclerAdapter);
              mRecyclerView.setAdapter(mRecyclerAdapter);
              mRecyclerView.addItemDecoration(decor);
            }
            /*mRecyclerAdapter.setOnLoadMoreListener(mRecyclerView, new BaseAbstractRecyclerAdapter.OnLoadMoreListener() {

                int offset = 0;
                int limit = 100;

                @Override
                public void onLoadMore() {
                    List<Doctor> newDoctors = new DoctorDAO(mActivity).getAlphabetically(limit, offset);
                    offset += limit;
                    mRecyclerAdapter.appendAll(newDoctors);
                }
            });*/
            // mErrorMsg.setVisibility(View.GONE);
            // mRecyclerView.setVisibility(View.VISIBLE);
            if (mErrorMsg instanceof DefaultTextView) {
              ((DefaultTextView) mErrorMsg).setText(getString(R.string.empty_doctors));
            }
          } else if (msg.getData().containsKey(RecentDoctorsAsyncTask.ERROR_DATA)) {
            LOG_TRACER.d(msg.getData().getString(RecentDoctorsAsyncTask.ERROR_DATA));
            if (mErrorMsg instanceof DefaultTextView) {
              ((DefaultTextView) mErrorMsg)
                  .setText(msg.getData().getString(RecentDoctorsAsyncTask.ERROR_DATA));
            }
            // mErrorMsg.setVisibility(View.VISIBLE);
            // mRecyclerView.setVisibility(View.GONE);
          }
        }
/** Created by vinoth on 10/22/15. */
public class AllDoctorsFragment extends BaseFragment
    implements BaseFragment.PagerSlideChange, BaseFragment.Searchable {

  public static final LogTracer LOG_TRACER = LogTracer.instance(AllDoctorsFragment.class);
  BaseActivity mActivity;
  private View mView;
  private View mErrorMsg;
  private DefaultRecyclerView mRecyclerView;
  private AllDoctorsRecyclerAdapter mRecyclerAdapter;
  private List<Doctor> mDoctors;
  private AllDoctorsAsyncTask mTask;
  private StickyHeaderDecoration decor;
  private Handler mHandler =
      new Handler() {
        @Override
        public void handleMessage(Message msg) {
          super.handleMessage(msg);
          mActivity.hideLoader();
          if (msg.getData().containsKey(RecentDoctorsAsyncTask.SUCCESS_DATA)) {
            Object[] objects =
                (Object[]) msg.getData().getSerializable(RecentDoctorsAsyncTask.SUCCESS_DATA);
            Doctor[] doctors = Arrays.copyOf(objects, objects.length, Doctor[].class);
            mDoctors = new ArrayList<Doctor>(Arrays.asList(doctors));
            Collections.sort(
                mDoctors,
                new Comparator<Doctor>() {
                  @Override
                  public int compare(Doctor doctor, Doctor t1) {
                    return doctor.getDisplayName().compareToIgnoreCase(t1.getDisplayName());
                  }
                });
            if (mRecyclerAdapter != null) {
              mRecyclerAdapter.addAll(mDoctors);
              mRecyclerAdapter.notifyDataSetChanged();
            } else {
              mRecyclerAdapter =
                  new AllDoctorsRecyclerAdapter(AllDoctorsFragment.this.getActivity(), mDoctors);
              mRecyclerAdapter.setEmptyView(mErrorMsg);
              mRecyclerView.setLayoutManager(
                  new LinearLayoutManager(AllDoctorsFragment.this.getActivity()));
              final DividerDecoration divider =
                  new DividerDecoration.Builder(AllDoctorsFragment.this.getActivity())
                      .setHeight(R.dimen.default_divider_height)
                      .setPadding(R.dimen.default_divider_padding)
                      .setColorResource(R.color.default_header_color)
                      .build();

              mRecyclerView.setHasFixedSize(true);
              mRecyclerView.setLayoutManager(
                  new LinearLayoutManager(AllDoctorsFragment.this.getActivity()));
              // mRecyclerView.addItemDecoration(divider);

              decor = new StickyHeaderDecoration(mRecyclerAdapter);
              mRecyclerView.setAdapter(mRecyclerAdapter);
              mRecyclerView.addItemDecoration(decor);
            }
            /*mRecyclerAdapter.setOnLoadMoreListener(mRecyclerView, new BaseAbstractRecyclerAdapter.OnLoadMoreListener() {

                int offset = 0;
                int limit = 100;

                @Override
                public void onLoadMore() {
                    List<Doctor> newDoctors = new DoctorDAO(mActivity).getAlphabetically(limit, offset);
                    offset += limit;
                    mRecyclerAdapter.appendAll(newDoctors);
                }
            });*/
            // mErrorMsg.setVisibility(View.GONE);
            // mRecyclerView.setVisibility(View.VISIBLE);
            if (mErrorMsg instanceof DefaultTextView) {
              ((DefaultTextView) mErrorMsg).setText(getString(R.string.empty_doctors));
            }
          } else if (msg.getData().containsKey(RecentDoctorsAsyncTask.ERROR_DATA)) {
            LOG_TRACER.d(msg.getData().getString(RecentDoctorsAsyncTask.ERROR_DATA));
            if (mErrorMsg instanceof DefaultTextView) {
              ((DefaultTextView) mErrorMsg)
                  .setText(msg.getData().getString(RecentDoctorsAsyncTask.ERROR_DATA));
            }
            // mErrorMsg.setVisibility(View.VISIBLE);
            // mRecyclerView.setVisibility(View.GONE);
          }
        }
      };

  public AllDoctorsFragment() {}

  @Nullable
  @Override
  public View onCreateView(
      LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    mView = inflater.inflate(R.layout.fragment_doctors_list, container, false);
    mActivity = (BaseActivity) getActivity();
    mRecyclerView = (DefaultRecyclerView) mView.findViewById(R.id.doctor_list);
    mErrorMsg = mView.findViewById(R.id.common_error);

    mRecyclerAdapter =
        new AllDoctorsRecyclerAdapter(
            AllDoctorsFragment.this.getActivity(), new ArrayList<Doctor>());
    mRecyclerAdapter.setEmptyView(mErrorMsg);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(AllDoctorsFragment.this.getActivity()));
    mRecyclerView.setHasFixedSize(true);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(AllDoctorsFragment.this.getActivity()));
    decor = new StickyHeaderDecoration(mRecyclerAdapter);
    mRecyclerView.setAdapter(mRecyclerAdapter);
    mRecyclerView.addItemDecoration(decor);
    return mView;
  }

  @Override
  public void onResume() {
    super.onResume();
    onShow();
  }

  @Override
  public void onShow() {
    if (mDoctors == null
        || mDoctors.size() <= 0
        || SettingsUtils.getDoctorUpdateRequired(mActivity)) {
      if (mTask != null) mTask.cancel(true);
      mTask = new AllDoctorsAsyncTask(this.getActivity(), mHandler);
      mActivity.showLoader(null, null, true);
      mTask.execute();
    } else if (mRecyclerAdapter != null) {
      mRecyclerAdapter.addAll(mDoctors);
      mRecyclerAdapter.notifyDataSetChanged();
    }
  }

  @Override
  public void onHide() {
    if (mTask != null) mTask.cancel(true);
  }

  @Override
  public void onSearch(CharSequence query) {
    if (mRecyclerAdapter != null) {
      mRecyclerAdapter.getFilter().filter(query);
    }
  }
}