package com.guang.app.fragment;

import android.app.Fragment;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.apkfuns.logutils.LogUtils;
import com.guang.app.AppConfig;
import com.guang.app.R;
import com.guang.app.activity.AboutActivity;
import com.guang.app.activity.CardHistoryActivity;
import com.guang.app.activity.FeedbackActivity;
import com.guang.app.activity.LoginActivity;
import com.guang.app.api.CardApiFactory;
import com.guang.app.api.JwApiFactory;
import com.guang.app.api.WorkApiFactory;
import com.guang.app.model.BasicInfo;
import com.guang.app.model.CardBasic;
import com.guang.app.model.Schedule;
import com.guang.app.model.StrObjectResponse;
import com.guang.app.util.FileUtils;
import com.guang.app.util.ShareUtils;
import com.guang.app.util.TimeUtils;
import com.guang.app.util.drcom.DrcomFileUtils;
import com.tencent.mm.opensdk.modelmsg.SendMessageToWX;
import com.umeng.analytics.MobclickAgent;

import org.litepal.crud.DataSupport;

import butterknife.Bind;
import butterknife.ButterKnife;
import butterknife.OnClick;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import okhttp3.ResponseBody;

public class MeFragment extends Fragment {
    private static JwApiFactory factory = JwApiFactory.getInstance();
    private static CardApiFactory cardFactory = CardApiFactory.getInstance();
    private static WorkApiFactory workApiFactory = WorkApiFactory.getInstance();

    private static String mCardNum;         //校园卡卡号,获取校园卡余额时赋值

    @Bind(R.id.tv_me_icon)
    ImageView tvMeIcon;
    @Bind(R.id.tv_me_sno)
    TextView tvMeSno;
    @Bind(R.id.tv_me_name)
    TextView tvMeName;
    @Bind(R.id.tv_me_class)
    TextView tvMeClass;
    @Bind(R.id.tv_me_cash)
    TextView tvMeCash;
//    @Bind(R.id.tv_me_update)
//    TextView tvMeUpdate;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_me, container, false);
        ButterKnife.bind(this, view);
        getActivity().setTitle(R.string.app_name);

        tvMeSno.setText(AppConfig.sno);

        BasicInfo basicInfo = DataSupport.findFirst(BasicInfo.class);
        if(null != basicInfo) {
            setBasicInfo4View(basicInfo);
        }else{
            queryBasicInfo();
        }
        queryCurrentCash();
        return view;
    }

    //获取用户基本信息,姓名班级等
    private void queryBasicInfo(){
        factory.getBasicInfo(new Observer<BasicInfo>() {
            @Override
            public void onSubscribe(Disposable d) {
            }

            @Override
            public void onNext(BasicInfo value) {
                DataSupport.deleteAll(BasicInfo.class);
                value.save();
                setBasicInfo4View(value);
            }
            @Override
            public void onError(Throwable e) {
                if(e != null && !TextUtils.isEmpty(e.getMessage())) {
                    LogUtils.e(e.toString());
                    Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
                }
            }
            @Override
            public void onComplete() {

            }
        });
    }

    //校园卡余额
    private void queryCurrentCash(){
        cardFactory.getCurrentCash(new Observer<CardBasic>() {
            @Override
            public void onSubscribe(Disposable d) {
            }

            @Override
            public void onNext(CardBasic value) {
                if(null != value && !TextUtils.isEmpty(value.getCash())) {
                    tvMeCash.setText("¥" + value.getCash());
                    mCardNum = value.getCardNum();
                }else{
                    tvMeCash.setText("获取失败");
                }
            }
            @Override
            public void onError(Throwable e) {
                if(e != null && !TextUtils.isEmpty(e.getMessage())) {
                    LogUtils.e(e.toString());
                    Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
                }
                tvMeCash.setText("获取失败");
            }
            @Override
            public void onComplete() {
            }
        });
    }

    private void setBasicInfo4View(BasicInfo value) {

        if (value.getSex().equals("女")){
            tvMeName.setTextColor(getResources().getColor(R.color.pink));
        }

        tvMeName.setText(value.getName());
        tvMeClass.setText(value.getClassroom());

        Bitmap bitmap = FileUtils.loadAvatarBitmap(getActivity());
        if(bitmap != null){ //读取本地图片头像
            tvMeIcon.setImageBitmap(bitmap);
        }else{              //网络加载头像
            workApiFactory.getAvatarIcon(""+value.getName().charAt(0), new Observer<ResponseBody>() {
                @Override
                public void onSubscribe(Disposable d) {
                }
                @Override
                public void onNext(ResponseBody value) {
                    Bitmap bitmap = BitmapFactory.decodeStream(value.byteStream());
                    FileUtils.saveAvatarImage(getActivity(),bitmap);
                    tvMeIcon.setImageBitmap(bitmap);
                }
                @Override
                public void onError(Throwable e) {
                    if(tvMeIcon != null) {  //模拟器测试时的不知名原因 低概率出现
                        tvMeIcon.setBackgroundResource(R.mipmap.avatar_h);
                    }
                }
                @Override
                public void onComplete() {
                }
            });
        }

        //如果是公历生日那天打开,会弹窗表示生日祝福
        if( !TextUtils.isEmpty(value.getBirthday())
                && value.getBirthday().length() == 8
                && value.getBirthday().substring(4, 8) .equals( TimeUtils.getDateStringWithFormat("MMdd"))){
            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
            builder.setMessage( " 生日快乐 (๑•̀ㅂ•́)و✧");
            builder.setTitle(value.getName());
            builder.setPositiveButton("蟹蟹",new DialogInterface.OnClickListener(){
                @Override
                public void onClick(DialogInterface dialogInterface, int which) {
                }
            });
            builder.create().show();;
        }

        if(AppConfig.schoolmateSno.equals(AppConfig.sno)) {
            tvMeSno.setText("88888888888");
            tvMeName.setText("校友");
            tvMeClass.setText("广东财经大学毕业生班");
        }

    }

    @OnClick(R.id.layout_me_cashhistory) void showConsumeToday(){
        if(TextUtils.isEmpty(mCardNum)){
            Toast.makeText(getActivity(), "交易记录获取异常", Toast.LENGTH_SHORT).show();
            return;
        }
        Intent intent = new Intent(getActivity(), CardHistoryActivity.class);
        intent.putExtra(CardHistoryActivity.intentCardNum,mCardNum);
        startActivity(intent);
    }

    private int mSelectedPage = AppConfig.DefaultPage.HOME; //选择默认页的对话框的当前选择项
    @OnClick(R.id.tv_me_default_page) void clickDefaultPage(){
        final Context context = getActivity();
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setIcon(R.mipmap.me_default_page);
        builder.setTitle("打开APP后直达该页面");

        final String[] pages = {
                context.getString(R.string.tab_home), context.getString(R.string.tab_features),
                context.getString(R.string.tab_settings),context.getString(R.string.menu_drcom) };

        int pageIndex = AppConfig.defaultPage;   //默认选择哪个
        if(pageIndex == AppConfig.DefaultPage.DRCOM){
            pageIndex = 3;
        }
        mSelectedPage = pageIndex;  //当前选择
        //点击item选择时的事件
        builder.setSingleChoiceItems(pages, pageIndex, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                mSelectedPage = which;
            }
        });
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                if(mSelectedPage == 3){
                    mSelectedPage = AppConfig.DefaultPage.DRCOM;
                }
                AppConfig.defaultPage = mSelectedPage;
                FileUtils.setStoredDefaultPage(context,AppConfig.defaultPage);
            }
        });
        builder.setNegativeButton("取消", null);
        builder.show();
    }

    @OnClick(R.id.tv_me_share) void clickShare() {
        android.app.AlertDialog.Builder builder=new android.app.AlertDialog.Builder(getActivity());
        builder.setIcon(R.mipmap.app_icon);
        builder.setTitle("爱分享的人运气总不会差");
        builder.setItems(R.array.shareList, new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int which) {
                int scene = SendMessageToWX.Req.WXSceneSession;
                if(which == 1) {
                    scene = SendMessageToWX.Req.WXSceneTimeline;
                }else if(which == 2){
                    scene = SendMessageToWX.Req.WXSceneFavorite;
                }
                ShareUtils.install(getActivity());
                ShareUtils.shareWeb(getActivity(),getResources().getString(R.string.app_name)+",你的掌上校园伴侣","广财专用APP,学生开发,课表饭卡校园网,一样不少",AppConfig.WXSHARE_URL, scene);
            }
        });
        builder.create().show();
    }

    @OnClick(R.id.tv_me_about) void clickAbout(){
        startActivity(new Intent(getActivity(), AboutActivity.class));
    }
    @OnClick(R.id.tv_me_feedback) void feedback(){
        startActivity(new Intent(getActivity(), FeedbackActivity.class));
    }

    @OnClick(R.id.tv_me_exit) void logout() {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("确定退出(切换)账号?");
        builder.setMessage("通常情况下按返回键就好了");
        builder.setNegativeButton("取消",null);
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {

                startActivity(new Intent(getActivity(), LoginActivity.class));
                FileUtils.expireStoredAccount(getActivity());//防止点退出后重新打开APP会进入旧帐号
//                FileUtils.expireTipsNeverShowAgain(getActivity());/// 重新登陆/切换用户后登陆提示不给看到
                DrcomFileUtils.expireStoredAccount(getActivity());  //drcom信息
                FileUtils.clearAvatarImage(getActivity());  //清除头像
                DataSupport.deleteAll(Schedule.class);  //清空课程表
                DataSupport.deleteAll(BasicInfo.class);
                MobclickAgent.onProfileSignOff();//友盟统计用户退出
                //服务器端的退出登陆,这个成功与否不影响上面操作
                workApiFactory.allLogout(new Observer<StrObjectResponse>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                    }
                    @Override
                    public void onNext(StrObjectResponse value) {
                        //不需要做处理
                    }
                    @Override
                    public void onError(Throwable e) {
                        if(null != e.getMessage()){
                            LogUtils.e(e.getMessage());
                        }
                    }
                    @Override
                    public void onComplete() {
                    }
                });

                getActivity().finish();
            }
        });
        builder.create().show();
    }


    @Override
    public void onDestroyView() {
        super.onDestroyView();
        ButterKnife.unbind(this);
    }
}