package com.phlx.anchorcollect.ui.fragment.vm;

import android.app.Application;
import android.graphics.drawable.Drawable;
import android.os.Environment;

import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.databinding.ObservableField;

import com.phlx.anchorcollect.Configs;
import com.phlx.anchorcollect.R;
import com.phlx.anchorcollect.data.Repository;
import com.phlx.anchorcollect.db.DbUtil;
import com.phlx.anchorcollect.db.gen.CardEntityDao;
import com.phlx.anchorcollect.db.interf.DbIDUCallBack;
import com.phlx.anchorcollect.db.interf.DbQueryCallBack;
import com.phlx.anchorcollect.entity.CardEntity;
import com.phlx.anchorcollect.entity.PerformanceEntity;
import com.phlx.anchorcollect.entity.UIParamEntity;
import com.phlx.anchorcollect.entity.WeightManEntity;
import com.phlx.anchorcollect.util.TextUtil;

import org.greenrobot.greendao.query.QueryBuilder;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import me.goldze.mvvmhabit.base.BaseViewModel;
import me.goldze.mvvmhabit.binding.command.BindingAction;
import me.goldze.mvvmhabit.binding.command.BindingCommand;
import me.goldze.mvvmhabit.bus.event.SingleLiveEvent;
import me.goldze.mvvmhabit.utils.ToastUtils;

public class CollectVM extends BaseViewModel<Repository> {

    public List<UIParamEntity> uiList = new ArrayList<>();
    public UIParamEntity currentParamEntity;

    public SingleLiveEvent<Boolean> onCattleClickEvent = new SingleLiveEvent<>();
    public SingleLiveEvent<Boolean> onCardClickEvent = new SingleLiveEvent<>();
    public SingleLiveEvent<Boolean> onTagClickEvent = new SingleLiveEvent<>();
    public SingleLiveEvent<Boolean> onNotifyAllEvent = new SingleLiveEvent<>();//true是清空页面
    public int currentId = -1;

    public ObservableField<String> tag = new ObservableField<>("");
    public ObservableField<String> weight = new ObservableField<>("125.5");

    //功能
    private String collectType;

    public Drawable drawableImg;
    //照片路径
    private String imgUrl;
    private File imgFile;

    public CollectVM(@NonNull Application application, Repository model) {
        super(application, model);

        //ImageView的占位图片，可以解决RecyclerView中图片错误问题
        drawableImg = ContextCompat.getDrawable(getApplication(), R.drawable.no_image);
    }

    public void initData(String tag) {

        imgUrl = Environment.getExternalStorageDirectory().getAbsolutePath() +
                "/collect/picture/"
                + "anchorCiq" + tag + ".jpg";
        imgFile = new File(imgUrl);

        switch (collectType) {
            case Configs.BASE_ARCHIVES:
                queryCard(tag);
                break;
            case Configs.SIGN_MEASURE:
                queryWeight(tag);
                break;
            case Configs.TREATMENT_RECORD:
                querySign(tag);
                break;
            case Configs.WEIGHTING_MANAGE:
                queryHealth(tag);
                break;
            case Configs.IMMUN_RECORD:
                queryImmun(tag);
                break;
        }

    }

    public String getImgUrl() {
        return imgUrl;
    }

    public void setCollectType(String collectType) {
        this.collectType = collectType;
    }

    public void click(int id) {

        for (UIParamEntity upe : uiList) {
            if (id == upe.getId()) {
                currentParamEntity = upe;
                break;
            }
        }
        currentId = id;
        onCardClickEvent.call();
    }

    //save
    public BindingCommand onCardSaveClick = new BindingCommand(new BindingAction() {
        @Override
        public void call() {

            if (TextUtil.isSpace(tag.get())) {

//                showDialog("请扫描或新建标签...");
                ToastUtils.showShort("请扫描或新建标签");
                return;
            }

            switch (collectType) {
                case Configs.BASE_ARCHIVES:
                    saveCard();
                    break;
                case Configs.SIGN_MEASURE:
                    saveWeight();
                    break;
                case Configs.TREATMENT_RECORD:
                    saveSign();
                    break;
                case Configs.WEIGHTING_MANAGE:
                    saveHealth();
                    break;
                case Configs.IMMUN_RECORD:
                    saveImmun();
                    break;
            }
        }
    });

    //输入可视耳标
    public BindingCommand onTagInputClick = new BindingCommand(new BindingAction() {
        @Override
        public void call() {
            onTagClickEvent.call();
        }
    });

    //当前牛信息展示
    public BindingCommand onCattleInfoClick = new BindingCommand(new BindingAction() {
        @Override
        public void call() {
            onCattleClickEvent.call();
        }
    });


    /* ===========================查询数据库 页面赋值开始=================================  */

    /**
     * 基础档案-查询数据库
     */
    private void queryCard(String tag) {
        QueryBuilder<CardEntity> builder =
                DbUtil.getInstance().getQueryBuilder(CardEntity.class)
                        .where(CardEntityDao.Properties.RegistrationNo.eq(tag));
        DbUtil.getInstance().setDbQueryCallBack(new DbQueryCallBack<CardEntity>() {
            @Override
            public void onSuccess(List<CardEntity> result) {

                if (result != null && result.size() > 0) {
                    uiList.get(0).setValue(result.get(0).getBirthHeavy());
                    uiList.get(0).setName(result.get(0).getBirthHeavy());
                    uiList.get(1).setValue(result.get(0).getBirthdate());
                    uiList.get(1).setName(result.get(0).getBirthdate());
                    uiList.get(2).setValue(result.get(0).getVarieties());
                    uiList.get(2).setName(result.get(0).getVarieties());
                    uiList.get(3).setValue(result.get(0).getSex());
                    uiList.get(3).setName(result.get(0).getSex());
                    uiList.get(4).setValue(result.get(0).getEaseBirth());
                    uiList.get(4).setName(result.get(0).getEaseBirth());
                    uiList.get(5).setValue(result.get(0).getFatherReg());
                    uiList.get(5).setName(result.get(0).getFatherReg());
                    uiList.get(6).setValue(result.get(0).getMotherReg());
                    uiList.get(6).setName(result.get(0).getMotherReg());
                    uiList.get(7).setValue(result.get(0).getChildTime());
                    uiList.get(7).setName(result.get(0).getChildTime());
                    uiList.get(8).setValue(result.get(0).getIsTwins());
                    uiList.get(8).setName(result.get(0).getIsTwins());
                    uiList.get(9).setValue(result.get(0).getIsColostrum());
                    uiList.get(9).setName(result.get(0).getIsColostrum());
                    uiList.get(10).setValue(result.get(0).getIsDehorning());
                    uiList.get(10).setName(result.get(0).getIsDehorning());
                    onNotifyAllEvent.setValue(false);
                } else {
                    onNotifyAllEvent.setValue(true);
                }

                Configs.tempTag = "";
            }

            @Override
            public void onFailed() {
                Configs.tempTag = "";
                ToastUtils.showShort("基础档案数据库查询失败");
            }
        }).queryAsyncAll(CardEntity.class, builder);
    }

    /**
     * 称重管理-查询数据库
     */
    private void queryWeight(String tag) {
//        QueryBuilder<WeightManEntity> builder =
//                DbUtil.getInstance().getQueryBuilder(WeightManEntity.class).where(WeightingEntityDao.Properties.RegistrationNo.eq(tag));
//        DbUtil.getInstance().setDbQueryCallBack(new DbQueryCallBack<WeightManEntity>() {
//            @Override
//            public void onSuccess(List<WeightManEntity> result) {
//
//                if (result != null && result.size() > 0) {
//                    uiList.get(0).setValue(result.get(0).getWeightName());
//                    uiList.get(0).setName(result.get(0).getWeightName());
//                    uiList.get(1).setValue(result.get(0).getWeightingDate());
//                    uiList.get(1).setName(result.get(0).getWeightingDate());
//                    uiList.get(2).setValue(result.get(0).getPrincipalName());
//                    uiList.get(2).setName(result.get(0).getPrincipalName());
//                    uiList.get(3).setValue(result.get(0).getWeightCount());
//                    uiList.get(3).setName(result.get(0).getWeightCount());
//                    uiList.get(4).setValue(result.get(0).getCircleNo());
//                    uiList.get(4).setName(result.get(0).getCircleNo());
//                    onNotifyAllEvent.setValue(false);
//                } else {
//                    onNotifyAllEvent.setValue(true);
//                }
//
//                Configs.tempTag = "";
//            }
//
//            @Override
//            public void onFailed() {
//                Configs.tempTag = "";
//                ToastUtils.showShort("称重管理数据库查询失败");
//            }
//        }).queryAsyncAll(WeightManEntity.class, builder);
    }

    /**
     * 体征测定-查询数据库
     */
    private void querySign(String tag) {
//        QueryBuilder<PerformanceEntity> builder =
//                DbUtil.getInstance().getQueryBuilder(PerformanceEntity.class).where(PerformanceEntityDao.Properties.RegistrationNo.eq(tag));
//        DbUtil.getInstance().setDbQueryCallBack(new DbQueryCallBack<PerformanceEntity>() {
//            @Override
//            public void onSuccess(List<PerformanceEntity> result) {
//
//                if (result != null && result.size() > 0) {
//                    uiList.get(0).setValue(result.get(0).getAge());
//                    uiList.get(0).setName(result.get(0).getAge());
//                    uiList.get(1).setValue(result.get(0).getMeasureDate());
//                    uiList.get(1).setName(result.get(0).getMeasureDate());
//                    uiList.get(2).setValue(result.get(0).getHeight());
//                    uiList.get(2).setName(result.get(0).getHeight());
//                    uiList.get(3).setValue(result.get(0).getLength());
//                    uiList.get(3).setName(result.get(0).getLength());
//                    uiList.get(4).setValue(result.get(0).getBust());
//                    uiList.get(4).setName(result.get(0).getBust());
//                    uiList.get(5).setValue(result.get(0).getChestWidth());
//                    uiList.get(5).setName(result.get(0).getChestWidth());
//                    uiList.get(6).setValue(result.get(0).getChestDeep());
//                    uiList.get(6).setName(result.get(0).getChestDeep());
//                    uiList.get(7).setValue(result.get(0).getWaistWidth());
//                    uiList.get(7).setName(result.get(0).getWaistWidth());
//                    uiList.get(8).setValue(result.get(0).getCrossWidth());
//                    uiList.get(8).setName(result.get(0).getCrossWidth());
//                    uiList.get(9).setValue(result.get(0).getGuanWei());
//                    uiList.get(9).setName(result.get(0).getGuanWei());
//                    uiList.get(10).setValue(result.get(0).getHairLength());
//                    uiList.get(10).setName(result.get(0).getHairLength());
//                    uiList.get(11).setValue(result.get(0).getEyeMuscleArea());
//                    uiList.get(11).setName(result.get(0).getEyeMuscleArea());
//                    uiList.get(12).setValue(result.get(0).getBreedRes());
//                    uiList.get(12).setName(result.get(0).getBreedRes());
//                    onNotifyAllEvent.setValue(false);
//                } else {
//                    onNotifyAllEvent.setValue(true);
//                }
//
//                Configs.tempTag = "";
//            }
//
//            @Override
//            public void onFailed() {
//                Configs.tempTag = "";
//                ToastUtils.showShort("体征测定数据库查询失败");
//            }
//        }).queryAsyncAll(PerformanceEntity.class, builder);
    }

    /**
     * 健康管理-查询数据库
     */
    private void queryHealth(String tag) {
//        QueryBuilder<MedicalEntity> builder =
//                DbUtil.getInstance().getQueryBuilder(MedicalEntity.class).where(MedicalEntityDao.Properties.RegistrationNo.eq(tag));
//        DbUtil.getInstance().setDbQueryCallBack(new DbQueryCallBack<MedicalEntity>() {
//            @Override
//            public void onSuccess(List<MedicalEntity> result) {
//
//                if (result != null && result.size() > 0) {
//                    uiList.get(0).setValue(result.get(0).getTreatDate());
//                    uiList.get(0).setName(result.get(0).getTreatDate());
//                    uiList.get(1).setValue(result.get(0).getTreatPersonnel());
//                    uiList.get(1).setName(result.get(0).getTreatPersonnel());
//                    uiList.get(2).setValue(result.get(0).getCauseOf());
//                    uiList.get(2).setName(result.get(0).getCauseOf());
//                    uiList.get(3).setValue(result.get(0).getDrugName());
//                    uiList.get(3).setName(result.get(0).getDrugName());
//                    uiList.get(4).setValue(result.get(0).getSpecifications());
//                    uiList.get(4).setName(result.get(0).getSpecifications());
//                    uiList.get(5).setValue(result.get(0).getDrugMethods());
//                    uiList.get(5).setName(result.get(0).getDrugMethods());
//                    uiList.get(6).setValue(result.get(0).getNumber());
//                    uiList.get(6).setName(result.get(0).getNumber());
//                    uiList.get(7).setValue(result.get(0).getHoofDisease());
//                    uiList.get(7).setName(result.get(0).getHoofDisease());
//                    uiList.get(8).setValue(result.get(0).getInsecticide());
//                    uiList.get(8).setName(result.get(0).getInsecticide());
//                    onNotifyAllEvent.setValue(false);
//                } else {
//                    onNotifyAllEvent.setValue(true);
//                }
//
//                Configs.tempTag = "";
//            }
//
//            @Override
//            public void onFailed() {
//                Configs.tempTag = "";
//                ToastUtils.showShort("健康管理数据库查询失败");
//            }
//        }).queryAsyncAll(MedicalEntity.class, builder);
    }

    /**
     * 免疫管理-查询数据库
     */
    private void queryImmun(String tag) {
//        QueryBuilder<ImmuneEntity> builder =
//                DbUtil.getInstance().getQueryBuilder(ImmuneEntity.class).where(ImmuneEntityDao.Properties.RegistrationNo.eq(tag));
//        DbUtil.getInstance().setDbQueryCallBack(new DbQueryCallBack<ImmuneEntity>() {
//            @Override
//            public void onSuccess(List<ImmuneEntity> result) {
//
//                if (result != null && result.size() > 0) {
//                    uiList.get(0).setValue(result.get(0).getImmuneDate());
//                    uiList.get(0).setName(result.get(0).getImmuneDate());
//                    uiList.get(1).setValue(result.get(0).getVaccineName());
//                    uiList.get(1).setName(result.get(0).getVaccineName());
//                    uiList.get(2).setValue(result.get(0).getImmunePerson());
//                    uiList.get(2).setName(result.get(0).getImmunePerson());
//                    uiList.get(3).setValue(result.get(0).getCircleNo());
//                    uiList.get(3).setName(result.get(0).getCircleNo());
//                    uiList.get(4).setValue(result.get(0).getProductName());
//                    uiList.get(4).setName(result.get(0).getProductName());
//                    uiList.get(5).setValue(result.get(0).getLotnumber());
//                    uiList.get(5).setName(result.get(0).getLotnumber());
//                    uiList.get(6).setValue(result.get(0).getSpecifications());
//                    uiList.get(6).setName(result.get(0).getSpecifications());
//                    uiList.get(7).setValue(result.get(0).getImmuneDosage());
//                    uiList.get(7).setName(result.get(0).getImmuneDosage());
//                    uiList.get(8).setValue(result.get(0).getImmuneMethod());
//                    uiList.get(8).setName(result.get(0).getImmuneMethod());
//                    onNotifyAllEvent.setValue(false);
//                } else {
//                    onNotifyAllEvent.setValue(true);
//                }
//
//                Configs.tempTag = "";
//            }
//
//            @Override
//            public void onFailed() {
//                Configs.tempTag = "";
//                ToastUtils.showShort("免疫管理数据库查询失败");
//            }
//        }).queryAsyncAll(ImmuneEntity.class, builder);
    }
    /* ===========================查询数据库 页面赋值结束=================================  */

    /* ===========================储存数据库开始=================================  */

    /**
     * 基础档案-存储数据库
     */
    private void saveCard() {

        List<CardEntity> uploadData;
        uploadData = new ArrayList<>();

        CardEntity _cardEntity = new CardEntity();
        _cardEntity.setUnid(Long.parseLong(tag.get()));
        if (!TextUtil.isSpace(tag.get()))
            _cardEntity.setRegistrationNo(tag.get());
        if (!TextUtil.isSpace(weight.get()))
            _cardEntity.setBirthHeavy(weight.get());
        if (!TextUtil.isSpace(uiList.get(0).getValue()))
            _cardEntity.setBirthHeavy(uiList.get(0).getValue());
        if (!TextUtil.isSpace(uiList.get(1).getValue()))
            _cardEntity.setBirthdate(uiList.get(1).getValue());
        if (!TextUtil.isSpace(uiList.get(2).getValue()))
            _cardEntity.setVarieties(uiList.get(2).getValue());
        if (!TextUtil.isSpace(uiList.get(3).getValue()))
            _cardEntity.setSex(uiList.get(3).getValue());
        if (!TextUtil.isSpace(uiList.get(4).getValue()))
            _cardEntity.setEaseBirth(uiList.get(4).getValue());
        if (!TextUtil.isSpace(uiList.get(5).getValue()))
            _cardEntity.setFatherReg(uiList.get(5).getValue());
        if (!TextUtil.isSpace(uiList.get(6).getValue()))
            _cardEntity.setMotherReg(uiList.get(6).getValue());
        if (!TextUtil.isSpace(uiList.get(7).getValue()))
            _cardEntity.setChildTime(uiList.get(7).getValue());
        if (!TextUtil.isSpace(uiList.get(8).getValue()))
            _cardEntity.setIsTwins(uiList.get(8).getValue());
        if (!TextUtil.isSpace(uiList.get(9).getValue()))
            _cardEntity.setIsColostrum(uiList.get(9).getValue());
        if (!TextUtil.isSpace(uiList.get(10).getValue()))
            _cardEntity.setIsDehorning(uiList.get(10).getValue());

        uploadData.add(_cardEntity);

        showDialog("正在保存本地...");
        DbUtil.getInstance().setDbIDUCallBack(new DbIDUCallBack() {
            @Override
            public void onNotification(boolean result) {
                dismissDialog();
                if (result) {
                    ToastUtils.showShort("基础档案保存成功");
                    tag.set("");
                    onNotifyAllEvent.setValue(true);
                } else {
                    ToastUtils.showShort("基础档案保存失败");
                }
            }
        }).insertAsyncBatch(CardEntity.class, uploadData);

    }

    /**
     * 称重管理-存储数据库
     */
    private void saveWeight() {

        List<WeightManEntity> uploadData = new ArrayList<>();

        WeightManEntity _entity = new WeightManEntity();
//        _entity.setUnid(tag.get());
//        _entity.setRegistrationNo(tag.get());
//        _entity.setWeight("125.5");
//        _entity.setWeightName(uiList.get(0).getValue());
//        _entity.setWeightingDate(uiList.get(1).getValue());
//        _entity.setPrincipalName(uiList.get(2).getValue());
//        _entity.setWeightCount(uiList.get(3).getValue());
//        _entity.setCircleNo(uiList.get(4).getValue());

        uploadData.add(_entity);

        showDialog("正在保存本地...");
        DbUtil.getInstance().setDbIDUCallBack(new DbIDUCallBack() {
            @Override
            public void onNotification(boolean result) {
                dismissDialog();
                if (result) {
                    ToastUtils.showShort("称重管理保存成功");
                    tag.set("");
                    onNotifyAllEvent.setValue(true);
                } else {
                    ToastUtils.showShort("称重管理保存失败");
                }
            }
        }).insertAsyncBatch(WeightManEntity.class, uploadData);

    }

    /**
     * 体征测定-存储数据库
     */
    private void saveSign() {

        List<PerformanceEntity> uploadData = new ArrayList<>();

        PerformanceEntity _entity = new PerformanceEntity();
//        _entity.setUnid(Long.parseLong(tag.get()));
//        _entity.setRegistrationNo(tag.get());
        _entity.setWeight(weight.get());
        _entity.setAge(uiList.get(0).getValue());
        _entity.setMeasureDate(uiList.get(1).getValue());
        _entity.setHeight(uiList.get(2).getValue());
        _entity.setLength(uiList.get(3).getValue());
        _entity.setBust(uiList.get(4).getValue());
        _entity.setChestWidth(uiList.get(5).getValue());
        _entity.setChestDeep(uiList.get(6).getValue());
        _entity.setWaistWidth(uiList.get(7).getValue());
        _entity.setCrossWidth(uiList.get(8).getValue());
        _entity.setGuanWei(uiList.get(9).getValue());
        _entity.setHairLength(uiList.get(10).getValue());
        _entity.setEyeMuscleArea(uiList.get(11).getValue());
        _entity.setBreedRes(uiList.get(12).getValue());

        uploadData.add(_entity);

        showDialog("正在保存本地...");
        DbUtil.getInstance().setDbIDUCallBack(new DbIDUCallBack() {
            @Override
            public void onNotification(boolean result) {
                dismissDialog();
                if (result) {
                    ToastUtils.showShort("体征测定保存成功");
                    tag.set("");
                    onNotifyAllEvent.setValue(true);
                } else {
                    ToastUtils.showShort("体征测定保存失败");
                }
            }
        }).insertAsyncBatch(PerformanceEntity.class, uploadData);

    }

    /**
     * 健康管理-存储数据库
     */
    private void saveHealth() {

//        List<MedicalEntity> uploadData = new ArrayList<>();
//
//        MedicalEntity _entity = new MedicalEntity();
//        _entity.setUnid(tag.get());
//        _entity.setRegistrationNo(tag.get());
////        _entity.setBirthHeavy(weight.get());
//        _entity.setTreatDate(uiList.get(0).getValue());
//        _entity.setTreatPersonnel(uiList.get(1).getValue());
//        _entity.setCauseOf(uiList.get(2).getValue());
//        _entity.setDrugName(uiList.get(3).getValue());
//        _entity.setSpecifications(uiList.get(4).getValue());
//        _entity.setDrugMethods(uiList.get(5).getValue());
//        _entity.setNumber(uiList.get(6).getValue());
//        _entity.setHoofDisease(uiList.get(7).getValue());
//        _entity.setInsecticide(uiList.get(8).getValue());
//
//        uploadData.add(_entity);
//
//        showDialog("正在保存本地...");
//        DbUtil.getInstance().setDbIDUCallBack(new DbIDUCallBack() {
//            @Override
//            public void onNotification(boolean result) {
//                dismissDialog();
//                if (result) {
//                    ToastUtils.showShort("健康管理保存成功");
//                    tag.set("");
//                    onNotifyAllEvent.setValue(true);
//                } else {
//                    ToastUtils.showShort("健康管理保存失败");
//                }
//            }
//        }).insertAsyncBatch(MedicalEntity.class, uploadData);

    }

    /**
     * 免疫管理-存储数据库
     */
    private void saveImmun() {

//        List<ImmuneEntity> uploadData = new ArrayList<>();
//
//        ImmuneEntity _entity = new ImmuneEntity();
//        _entity.setUnid(tag.get());
//        _entity.setRegistrationNo(tag.get());
////        _cardEntity.setBirthHeavy(weight.get());
//        _entity.setImmuneDate(uiList.get(0).getValue());
//        _entity.setVaccineName(uiList.get(1).getValue());
//        _entity.setImmunePerson(uiList.get(2).getValue());
//        _entity.setCircleNo(uiList.get(3).getValue());
//        _entity.setProductName(uiList.get(4).getValue());
//        _entity.setLotnumber(uiList.get(5).getValue());
//        _entity.setSpecifications(uiList.get(6).getValue());
//        _entity.setImmuneDosage(uiList.get(7).getValue());
//        _entity.setImmuneMethod(uiList.get(8).getValue());
//
//        uploadData.add(_entity);
//
//        showDialog("正在保存本地...");
//        DbUtil.getInstance().setDbIDUCallBack(new DbIDUCallBack() {
//            @Override
//            public void onNotification(boolean result) {
//                dismissDialog();
//                if (result) {
//                    ToastUtils.showShort("免疫管理保存成功");
//                    tag.set("");
//                    onNotifyAllEvent.setValue(true);
//                } else {
//                    ToastUtils.showShort("免疫管理保存失败");
//                }
//            }
//        }).insertAsyncBatch(ImmuneEntity.class, uploadData);

    }

    /* ===========================储存数据库结束=================================  */


}
