package in.techware.lataxidriver.fragments;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.view.HapticFeedbackConstants;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;

import java.util.HashMap;

import in.techware.lataxidriver.R;
import in.techware.lataxidriver.activity.AboutActivity;
import in.techware.lataxidriver.activity.DocumentsActivity;
import in.techware.lataxidriver.activity.EditVehicleDetailsActivity;
import in.techware.lataxidriver.activity.HelpListActivity;
import in.techware.lataxidriver.activity.ProfileActivity;
import in.techware.lataxidriver.activity.SettingsActivity;
import in.techware.lataxidriver.activity.SplashActivity;
import in.techware.lataxidriver.app.App;
import in.techware.lataxidriver.config.Config;
import in.techware.lataxidriver.listeners.ProfileListener;
import in.techware.lataxidriver.model.ProfileBean;
import in.techware.lataxidriver.net.DataManager;


public class AccountsFragment extends BaseFragment {

    private AccountsFragmentListener mListener;
    private LinearLayout llHelp;
    private LinearLayout llWayBill;
    private LinearLayout llDocuments;
    private LinearLayout llSettings;
    private LinearLayout llAbout;
    private ImageButton ibEditProfile;
    private ImageButton ibEditVehicle;
    private Button btnLogout;
    private TextView txtName;
    private TextView txtVehicle;
    private ImageView ivVehicle;
    private ImageView ivProfilePhoto;
    private ProfileBean profileBean;
    private View.OnClickListener snackBarRefreshOnClickListener;

    public AccountsFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        initBase(inflater, container, savedInstanceState);

        View rootView = inflater.inflate(R.layout.fragment_accounts, null);
        lytContent.addView(rootView);

       /* if (getArguments().containsKey("mapBean"))
            mapBean = (MapBean) getArguments().getSerializable("mapBean");*/

        intiView(rootView);


        return lytBase;
    }

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

        if (App.isNetworkAvailable()) {
            fetchProfile();
        }

    }

    private void intiView(View rootView) {

        snackBarRefreshOnClickListener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                v.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
//                mVibrator.vibrate(25);
                fetchProfile();
            }
        };


        llHelp = (LinearLayout) rootView.findViewById(R.id.ll_accounts_help);
        llWayBill = (LinearLayout) rootView.findViewById(R.id.ll_accounts_way_bill);
        llDocuments = (LinearLayout) rootView.findViewById(R.id.ll_accounts_documents);
        llSettings = (LinearLayout) rootView.findViewById(R.id.ll_accounts_settings);
        llAbout = (LinearLayout) rootView.findViewById(R.id.ll_accounts_about);

        txtName = (TextView) rootView.findViewById(R.id.txt_accounts_driver_name);
        txtVehicle = (TextView) rootView.findViewById(R.id.txt_accounts_vehicle_name);

        ivVehicle = (ImageView) rootView.findViewById(R.id.iv_accounts_driver_car_photo);
        ivProfilePhoto = (ImageView) rootView.findViewById(R.id.iv_accounts_profile_photo);

        ibEditProfile = (ImageButton) rootView.findViewById(R.id.ib_accounts_edit_account);
        ibEditVehicle = (ImageButton) rootView.findViewById(R.id.ib_accounts_edit_car_details);

        btnLogout = (Button) rootView.findViewById(R.id.btn_accounts_logout);

        btnLogout.setTypeface(typeface);

        btnLogout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
                //mVibrator.vibrate(25);
                if (getActivity() != null) {
                    App.logout();
                    startActivity(new Intent(getActivity(), SplashActivity.class)
                            .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK));
                    getActivity().finish();
                }

            }
        });

        ivProfilePhoto.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
                //mVibrator.vibrate(25);

                startActivity(new Intent(getActivity(), ProfileActivity.class));
            }
        });

        ibEditProfile.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
                //mVibrator.vibrate(25);

                startActivity(new Intent(getActivity(), ProfileActivity.class));
            }
        });

        ibEditVehicle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
                //mVibrator.vibrate(25);

                startActivity(new Intent(getActivity(), EditVehicleDetailsActivity.class));
            }
        });

        llHelp.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
                //mVibrator.vibrate(25);

                startActivity(new Intent(getActivity(), HelpListActivity.class));
            }
        });
        llWayBill.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
                //mVibrator.vibrate(25);

//                startActivity(new Intent(getActivity(), HelpListActivity.class));
            }
        });
        llDocuments.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
                //mVibrator.vibrate(25);

                startActivity(new Intent(getActivity(), DocumentsActivity.class));
            }
        });
        llSettings.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
                //mVibrator.vibrate(25);

                startActivity(new Intent(getActivity(), SettingsActivity.class));
            }
        });
        llAbout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
                //mVibrator.vibrate(25);

                startActivity(new Intent(getActivity(), AboutActivity.class));
            }
        });


    }

    private void populateAccounts() {

        txtName.setText(profileBean != null ? profileBean.getName() : Config.getInstance().getName());

        Glide.with(getActivity())
                .load(profileBean != null ? profileBean.getProfilePhoto() : Config.getInstance().getProfilePhoto())
                .apply(new RequestOptions()
                        .error(R.drawable.ic_profile_photo_default)
                        .fallback(R.drawable.ic_profile_photo_default)
                        .centerCrop()
                        .circleCrop())
                .into(ivProfilePhoto);

    }


    private void fetchProfile() {

        HashMap<String, String> urlParams = new HashMap<>();
        urlParams.put("auth_token", Config.getInstance().getAuthToken());

/*        if (isLoadMore) {
            urlParams.put("page", String.valueOf(currentPage + 1));
        }*/

        DataManager.fetchProfile(urlParams, new ProfileListener() {
            @Override
            public void onLoadCompleted(ProfileBean profileBeanWS) {

                profileBean = profileBeanWS;
                if (getActivity() != null)
                    populateAccounts();

            }

            @Override
            public void onLoadFailed(String error) {
                Snackbar.make(coordinatorLayout, error, Snackbar.LENGTH_INDEFINITE)
                        .setAction(R.string.btn_retry, snackBarRefreshOnClickListener).show();
                if (getActivity() != null)
                    mListener.onSwipeRefreshChange(false);
            }
        });

    }

    public void onButtonPressed(Uri uri) {
        if (mListener != null) {
//            mListener.onFragmentInteraction(uri);
        }
    }

    @SuppressWarnings("deprecation")
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
            setListener(activity);
        }
    }

    private void setListener(Context context) {
        if (getActivity() instanceof AccountsFragmentListener) {
            mListener = (AccountsFragmentListener) getActivity();
        } else if (getParentFragment() instanceof AccountsFragmentListener) {
            mListener = (AccountsFragmentListener) getParentFragment();
        } else if (context instanceof AccountsFragmentListener) {
            mListener = (AccountsFragmentListener) context;
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement AccountsFragmentListener");
        }
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (getActivity() instanceof AccountsFragmentListener) {
            mListener = (AccountsFragmentListener) getActivity();
        } else if (getParentFragment() instanceof AccountsFragmentListener) {
            mListener = (AccountsFragmentListener) getParentFragment();
        } else if (context instanceof AccountsFragmentListener) {
            mListener = (AccountsFragmentListener) context;
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement AccountsFragmentListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }

    public interface AccountsFragmentListener {

        void onSwipeRefreshChange(boolean isRefreshing);

        void onSwipeEnabled(boolean isEnabled);

    }
}