package com.bonait.bnframework.common.constant;

import android.content.Intent;

import com.bonait.bnframework.R;
import com.bonait.bnframework.common.db.QueryDB;
import com.bonait.bnframework.common.db.mode.BPA_ALERTLOG;
import com.bonait.bnframework.common.db.mode.BPA_GOODS;
import com.bonait.bnframework.common.db.mode.BPA_GOODSRECIPE;
import com.bonait.bnframework.common.db.mode.BPA_LOG;
import com.bonait.bnframework.common.db.mode.BPA_MATERIAL;
import com.bonait.bnframework.common.db.mode.BPA_SILOS;
import com.bonait.bnframework.common.db.mode.BPA_SUBORDER;
import com.bonait.bnframework.common.db.res.MakeStatus;
import com.bonait.bnframework.common.db.res.ResGoodsMake;
import com.bonait.bnframework.common.db.res.ResGoodsRecipe;
import com.bonait.bnframework.common.db.res.StatusMode;
import com.bonait.bnframework.common.db.res.lcMode;
import com.bonait.bnframework.common.helper.I.IRun;
import com.bonait.bnframework.common.helper.I.IRunT;
import com.bonait.bnframework.common.helper.I.MyClickListener;
import com.bonait.bnframework.common.helper.mode.OrderA;
import com.bonait.bnframework.common.helper.mode.ResultA;
import com.bonait.bnframework.modules.home.adapter.lc_adapter;
import com.bonait.bnframework.modules.home.adapter.sp_adapter;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 单例模式
 * 数据中心
 */
public class DataBus {
    //region 单例模式
    private static DataBus  mInstance; //实例变量设置私有，防止直接通过类名访问

    private DataBus() {
        //默认构造函数私有，防止类外直接new创建对象
    }

    public static synchronized DataBus getInstance() { //静态同步方法作为唯一的实例对象获取方式
        if (mInstance==null) {
            mInstance = new DataBus();
        }
        return mInstance;
    }
    //endregion

    //region 主料投料界面
    /**
     * 显示主料名称
     */
    public ConcurrentHashMap<Integer,String> GetMainDisplayText(String goodid)
    {
        ConcurrentHashMap<Integer,String> resultData=new ConcurrentHashMap<>();
        String text1="";
        String text2="";
        String text3="";
        String text4="";
        try
        {
            ArrayList<BPA_GOODSRECIPE> goodsrecipes= QueryDB.GetGoodsSrecipeID(goodid);
            for (BPA_GOODSRECIPE goodsrecipe:goodsrecipes)
            {
                if(goodsrecipe.processname.equals("主料"))
                {
                    final HashMap<String,String> formulation=new HashMap<>();
                    //2.根据工序变量集合-获取变量名称和值
                    //region 获取变量名称和值
                    String text=goodsrecipe.processvalue;
                    List<String> data=new ArrayList<>();
                    if(text.contains("|"))
                    {
                        String[] res= text.split("[|]");
                        for (int i=0;i<res.length;i++)
                        {
                            data.add(res[i]);
                        }
                    }else
                    {
                        data.add(text);
                    }
                    for(String item:data)
                    {
                        if(!item.isEmpty() && item.contains(","))
                        {
                            String[] wl= item.split("[,]");
                            if (wl != null && wl.length == 2)
                            {
                                String name=wl[0];
                                String val=wl[1];
                                formulation.put(name,val);
                            }
                        }
                    }
                    //endregion

                    if(formulation.containsKey("主料名称"))
                    {
                        if(formulation.get("主料位置").toString().equals("1号位"))
                        {
                            text1+=formulation.get("主料名称");
                        }else if(formulation.get("主料位置").toString().equals("2号位"))
                        {
                            text2+=formulation.get("主料名称");
                        }else if(formulation.get("主料位置").toString().equals("3号位"))
                        {
                            text3+=formulation.get("主料名称");
                        }else if(formulation.get("主料位置").toString().equals("4号位"))
                        {
                            text4+=formulation.get("主料名称");
                        }
                    }
                }
            }
        }catch (Exception ex)
        {

        }

        resultData.put(1,text1);
        resultData.put(2,text2);
        resultData.put(3,text3);
        resultData.put(4,text4);
        return resultData;
    }
    //endregion

    //region 数据中心
    /**
     * 料仓数据Model
     */
    public List<lcMode> lcModes=new ArrayList<>();
    public lc_adapter lcadapter=null;
    public IRun SilosRefresh=null;

    /**
     * 获取料仓数据
     */
    public void GetLc()
    {
        try {
            lcModes=new ArrayList<>();
            //获取料仓数据
            ArrayList<BPA_SILOS> bpa_silos = QueryDB.GetSilosALL();
            //加载materials数据
            if (bpa_silos.size() > 0) {
                for (BPA_SILOS silo : bpa_silos) {
                    List<BPA_MATERIAL> m = QueryDB.GetMaterialBySilosID(silo.id);
                    if (m.size() > 0) {
                        lcModes.add(new lcMode(silo.id, silo.num, m.get(0).name, silo.silosmargin, silo.siloszl, m.get(0).id,m.get(0).type, silo.warningValue, silo.thrsoleValue));
                    } else {
                        lcModes.add(new lcMode(silo.id, silo.num, "未设置", silo.silosmargin, silo.siloszl, "",0, silo.warningValue, silo.thrsoleValue));
                    }
                }
            }
            for (lcMode item : lcModes) {
                ConfigName.getInstance().SilosDisplayMaterial.put(item.num,item.materialName+"");
            }

            if (lcadapter!=null)
            {
                lcadapter.refresh();
            }

            if(SilosRefresh!=null)
            {
                SilosRefresh.Run();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public ArrayList<lcMode> ResGetLc()
    {
        ArrayList<lcMode> lc=new ArrayList<>();
        try {
            //获取料仓数据
            ArrayList<BPA_SILOS> bpa_silos = QueryDB.GetSilosALL();
            //加载materials数据
            if (bpa_silos.size() > 0) {
                for (BPA_SILOS silo : bpa_silos) {
                    List<BPA_MATERIAL> m = QueryDB.GetMaterialBySilosID(silo.id);
                    if (m.size() > 0) {
                        lc.add(new lcMode(silo.id, silo.num, m.get(0).name, silo.silosmargin, silo.siloszl, m.get(0).id,m.get(0).type, silo.warningValue, silo.thrsoleValue));
                    } else {
                        lc.add(new lcMode(silo.id, silo.num, "未设置", silo.silosmargin, silo.siloszl, "",0, silo.warningValue, silo.thrsoleValue));
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return lc;
    }

    /**
     * 加满物料
     */
    public void TopUp(int index)
    {
        if(index>=0 && lcModes.size()>=0)
        {
            int zl= lcModes.get(index).siloszl;
            lcModes.get(index).silosmargin=zl<=0?10000:zl;
            QueryDB.UpdateYL(lcModes.get(index).id,lcModes.get(index).silosmargin);
            if (lcadapter!=null)
            {
                lcadapter.refresh();
            }
        }
    }

    /**
     * 商品数据
     */
    public List<BPA_GOODS> Goods=new ArrayList<>();
    public sp_adapter spadapter=null;
    /**
     * 选中菜品
     */
    public BPA_GOODS SelectGood=null;
    /**
     * 选择菜品事件
     */
    public MyClickListener mListener=null;

    /**
     * 选择菜品事件
     */
    public MyClickListener mListener1=null;
    /**
     * 获取商品数据
     */
    public void GetGoods(String name)
    {
        try {
            Goods.clear();
            ArrayList<BPA_GOODS> good=new ArrayList<>();
            if (name.isEmpty())
            {
                good=QueryDB.GetGoodsALL();
            }else
            {
                good= QueryDB.GetGoodsLike(name);
            }
            for (BPA_GOODS k : good) {
                Goods.add((BPA_GOODS) k);
            }

            if (spadapter!=null)
            {
                DataBus.getInstance().spadapter.refresh();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //endregion

    //region DIY 工序临时保存
    public String ShowGoodName="";
    /**
     * 工序步骤
     */
    public ArrayList<BPA_GOODSRECIPE> bpa_goodsrecipes = new ArrayList<>();
    /**
     * 执行总时间
     */
    public int TimeOut=0;
    /**
     * 抽水总时间
     */
    public int PumpWaterTimeOut=0;
    //endregion
}
