package org.nl.acs.device_driver.tianneng.guhuashi;

import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.nl.acs.device.device_driver.standard_inspect.ItemDto;

import java.util.ArrayList;
import java.util.List;

@Slf4j
@Data
public class ItemProtocol {

    //读取信号
    public static String item_VW7010 = "VW7010";
    public static String item_VW7012 = "VW7012";
    public static String item_VW7014 = "VW7014";
    public static String item_VW7016 = "VW7016";
    public static String item_VW7018 = "VW7018";
    public static String item_VW7020 = "VW7020";
    public static String item_VW7022 = "VW7022";
    public static String item_VW7024 = "VW7024";
    public static String item_VW7026 = "VW7026";
    public static String item_VW7028 = "VW7028";
    public static String item_VW7030 = "VW7030";
    public static String item_VW7032 = "VW7032";
    public static String item_VW7034 = "VW7034";
    public static String item_VW7036 = "VW7036";
    public static String item_VW7038 = "VW7038";
    public static String item_VW7040 = "VW7040";
    public static String item_VW7042 = "VW7042";
    public static String item_VW7044 = "VW7044";
    public static String item_VD7046 = "VD7046";
    public static String item_VW7056 = "VW7056";
    public static String item_VW7058 = "VW7058";
    public static String item_VW7076 = "VW7076";
    public static String item_VW70001 = "VW70001";
    public static String item_VW70002 = "VW70002";
    public static String item_VW70003 = "VW70003";
    public static String item_VW70004 = "VW70004";
    public static String item_VW70005 = "VW70005";
    public static String item_VW70006 = "VW70006";
    public static String item_VW70007 = "VW70007";
    public static String item_VW70020 = "VW70020";

    //写入信号
    public static String item_VW70040 = "VW70040";
    public static String item_VW70041 = "VW70041";
//    public static String item_VW70042 = "VW70042";
    public static String item_VW70043 = "VW70043";
    public static String item_VW70044 = "VW70044";
    public static String item_VW70045 = "VW70045";
    public static String item_VW70050 = "VW70050";
    public static String item_VW70051 = "VW70051";
//    public static String item_VW70052 = "VW70052";
    public static String item_VW70053 = "VW70053";
    public static String item_VW70054 = "VW70054";

    private GuhuashiSiteDeviceDriver driver;

    public ItemProtocol(GuhuashiSiteDeviceDriver driver) {
        this.driver = driver;
    }

    public int getVW7010() {
        return this.getOpcIntegerValue(item_VW7010);
    }

    public int getVW7012() {
        return this.getOpcIntegerValue(item_VW7012);
    }

    public int getVW7014() {
        return this.getOpcIntegerValue(item_VW7014);
    }

    public int getVW7016() {
        return this.getOpcIntegerValue(item_VW7016);
    }

    public int getVW7018() {
        return this.getOpcIntegerValue(item_VW7018);
    }

    public int getVW7020() {
        return this.getOpcIntegerValue(item_VW7020);
    }

    public int getVW7022() {
        return this.getOpcIntegerValue(item_VW7022);
    }

    public int getVW7024() {
        return this.getOpcIntegerValue(item_VW7024);
    }

    public int getVW7026() {
        return this.getOpcIntegerValue(item_VW7026);
    }

    public int getVW7028() {
        return this.getOpcIntegerValue(item_VW7028);
    }

    public int getVW7030() {
        return this.getOpcIntegerValue(item_VW7030);
    }

    public int getVW7032() {
        return this.getOpcIntegerValue(item_VW7032);
    }

    public int getVW7034() {
        return this.getOpcIntegerValue(item_VW7034);
    }

    public int getVW7036() {
        return this.getOpcIntegerValue(item_VW7036);
    }

    public int getVW7038() {
        return this.getOpcIntegerValue(item_VW7038);
    }

    public int getVW7040() {
        return this.getOpcIntegerValue(item_VW7040);
    }

    public int getVW7042() {
        return this.getOpcIntegerValue(item_VW7042);
    }

    public int getVW7044() {
        return this.getOpcIntegerValue(item_VW7044);
    }

    public int getVD7046() {
        return this.getOpcIntegerValue(item_VD7046);
    }

    public int getVW7056() {
        return this.getOpcIntegerValue(item_VW7056);
    }
    public int getVW7058() {
        return this.getOpcIntegerValue(item_VW7058);
    }
    public int getVW7076() {
        return this.getOpcIntegerValue(item_VW7076);
    }
    public int getVW70001() {
        return this.getOpcIntegerValue(item_VW70001);
    }
    public int getVW70002() {
        return this.getOpcIntegerValue(item_VW70002);
    }
    public int getVW70003() {
        return this.getOpcIntegerValue(item_VW70003);
    }
    public int getVW70004() {
        return this.getOpcIntegerValue(item_VW70004);
    }
    public int getVW70005() {
        return this.getOpcIntegerValue(item_VW70005);
    }
    public int getVW70006() {
        return this.getOpcIntegerValue(item_VW70006);
    }
    public int getVW70007() {
        return this.getOpcIntegerValue(item_VW70007);
    }

    public int getVW70020() {
        return this.getOpcIntegerValue(item_VW70020);
    }


    Boolean isonline;

    public int getOpcIntegerValue(String protocol) {
        try {
            Integer value = this.driver.getIntegeregerValue(protocol);
            if (value == null) {
                // log.error(this.getDriver().getDeviceCode() + ":protocol " + protocol + " 信号同步异常!");
                setIsonline(false);
            } else {
                setIsonline(true);
                return value;
            }
        } catch (Exception e) {

        }
        return 0;
    }

    public String getOpcStringValue(String protocol) {

        try {
            String value = this.driver.getStringValue(protocol);
            if (value == null) {
                // log.error(this.getDriver().getDeviceCode() + ":protocol " + protocol + " 信号同步异常!");
                setIsonline(false);
            } else {
                setIsonline(true);
                return value;
            }
        } catch (Exception e) {

        }
        return "0";
    }

    public static List<ItemDto> getReadableItemDtos() {
        ArrayList list = new ArrayList();
        list.add(new ItemDto(item_VW7010, "温度设定", "VW7010"));
        list.add(new ItemDto(item_VW7012, "温度显示", "VW7012"));
        list.add(new ItemDto(item_VW7014, "湿度设定", "VW7014"));
        list.add(new ItemDto(item_VW7016, "湿度显示", "VW7016"));
        list.add(new ItemDto(item_VW7018, "设定阶段时", "VW7018"));
        list.add(new ItemDto(item_VW7020, "设定阶段分", "VW7020"));
        list.add(new ItemDto(item_VW7022, "温度传感器选择", "VW7022"));
        list.add(new ItemDto(item_VW7024, "控制数组", "VW7024"));
        list.add(new ItemDto(item_VW7026, "实际显示总阶段数", "VW7026"));
        list.add(new ItemDto(item_VW7028, "总运行累加时", "VW7028"));
        list.add(new ItemDto(item_VW7030, "总运行累加分", "VW7030"));
        list.add(new ItemDto(item_VW7032, "主风机风量设定%", "VW7032"));
        list.add(new ItemDto(item_VW7034, "排湿风机风量设定%", "VW7034"));
        list.add(new ItemDto(item_VW7036, "固化/干燥", "VW7036"));
        list.add(new ItemDto(item_VW7038, "阶段累加时", "VW7038"));
        list.add(new ItemDto(item_VW7040, "阶段累加分", "VW7040"));
        list.add(new ItemDto(item_VW7042, "实际运行程序套数", "VW7042"));
        list.add(new ItemDto(item_VW7044, "正在执行的阶段数", "VW7044"));
        list.add(new ItemDto(item_VD7046, "报警内容", "VD7046"));
        list.add(new ItemDto(item_VW7056, "工作模式", "VW7056"));
        list.add(new ItemDto(item_VW7058, "设备状态", "VW7058"));
        list.add(new ItemDto(item_VW7076, "心跳", "VW7076"));
        list.add(new ItemDto(item_VW70001, "工艺运行中信号", "VW7000.1"));
        list.add(new ItemDto(item_VW70002, "工艺运行结束信号", "VW7000.2"));
        list.add(new ItemDto(item_VW70003, "固化室内允许进板或出板信号（室内温度低于允许进入温度）", "VW7000.3"));
        list.add(new ItemDto(item_VW70004, "固化室前门已开信号", "VW7000.4"));
        list.add(new ItemDto(item_VW70005, "固化室前门已关信号", "VW7000.5"));
        list.add(new ItemDto(item_VW70006, "固化室后门已开信号", "VW7000.6"));
        list.add(new ItemDto(item_VW70007, "固化室后门已关信号", "VW7000.7"));
        list.add(new ItemDto(item_VW70020, "固化室工艺信号0-正常，1-保湿", "VW7002.0"));
        return list;
    }

    public static List<ItemDto> getWriteableItemDtos() {
        ArrayList list = new ArrayList();
        list.add(new ItemDto(item_VW70040, "RGV小车开前门请求信号", "VW7004.0"));
        list.add(new ItemDto(item_VW70041, "RGV小车在进板中", "VW7004.1"));
//        list.add(new ItemDto(item_VW70042, "", "VW7004.2"));
        list.add(new ItemDto(item_VW70043, "极板已进满信号", "VW7004.3"));
        list.add(new ItemDto(item_VW70044, "RCV小车关前门请求信号", "VW7004.4"));
        list.add(new ItemDto(item_VW70045, "RGV在下班时未进满信号", "VW7004.5"));
        list.add(new ItemDto(item_VW70050, "RGV小车开后门请求信号", "VW7005.0"));
        list.add(new ItemDto(item_VW70051, "RGV小车在出板中", "VW7005.1"));
//        list.add(new ItemDto(item_VW70052, "", "VW7005.2"));
        list.add(new ItemDto(item_VW70053, "极板已出完信号", "VW7005.3"));
        list.add(new ItemDto(item_VW70054, "RCV小车关后门请求信号", "VW7005.4"));
        return list;
    }

}

