require "log"
require "sys"
require "utils"
require "patch"
require "pack"
siganl = require 'posix.signal'
syswait = require 'posix.sys.wait'
unistd = require 'posix.unistd'
mqtt=require "mosquitto"
base64=require("base64")
dyutils=require("dyutils")
lpack=require("lua_pack")
require "internal_api"

SELECT_SCHEDULES_FILE = "SelectSchedules.json"

FILE_EXSIT = 1
ERROR_STATUS = 1


LOG_LEVEL = log.LOG_LEVEL_DEBUG
-- LOG_LEVEL = log.LOGLEVEL_INFO


p1_status={
    TAG_271C=0,
    TAG_271D=0,
    TAG_271E=0,
    TAG_271F=0,
    TAG_2720=0,
    TAG_2721=0,
    TAG_2722=0,
    TAG_2723=0,
    TAG_2724=0,
    TAG_272F=0,
    TAG_2730=0,
    TAG_2725=0,
    TAG_2726=0,
    TAG_2727=0,
    TAG_2731=0,
    TAG_2732=0,
}

p2_status={
    TAG_2734=0,
    TAG_2739=0,
}

p3_status={
    TAG_2716=0,
    TAG_2717=0,
    TAG_2718=0,
    TAG_2719=0,
    TAG_271A=0,
    TAG_271B=0,
}


local function t1_report()
    while true do
        sys.wait(3000)
        internal_api.service_response(gw_sn,string.format("%s_bmsmeter",gw_sn),"NULL","sanxianggongluxinxi",p1_status,0)
    end
end

local function t2_report()
    while true do
        sys.wait(15000)
        internal_api.service_response(gw_sn,string.format("%s_bmsmeter",gw_sn),"NULL","yougongzongdianliang",p2_status,0)
    end
end

local function t3_report()
    while true do
        sys.wait(10000)
        internal_api.service_response(gw_sn,string.format("%s_bmsmeter",gw_sn),"NULL","sanxiangcv",p3_status,0)
    end
end

local function iot2app(topic,payload)
    local obj = cjson.decode(payload)
    if string.find(topic,"_VPCS") then
        log.info("payload",payload)
        if obj.identifier == "Read101_125Data" then
            for k,v in pairs(p1_status) do
                   v = payload[k]
            end
            for k,v in pairs(p2_status) do
                v = payload[k]
            end
            for k,v in pairs(p3_status) do
                v = payload[k]
            end
        end
    end
end

local function pp2app(topic,payload)
    -- -- print("iot2app",topic,payload)
end

local function handler()
    local pid, status, code = syswait.wait(-1, syswait.WNOHANG)
    log.error('system exit', pid, status, code) --打印不出来
    os.exit(0)
end



function main(nodes_cfg,sn)
    log.info("main_loop", "=============== Direct Current RUN 1.0 ============")
    ERROR_STATUS = 0
    gw_sn = sn
    if not gw_sn then
        gw_sn = io.getGatewayID()
        -- gw_sn = "218800000010"
    end
    local devs = {string.format("%s_VPCS",gw_sn)}
    log.info("device list:",cjson.encode(devs))
    log.info("main_loop",  string.format("Try Run At Shell\nsn='%s'\nnodes='%s'\nmain_loop(nodes,sn)",gw_sn or "NOT SN",nodes_cfg or ""))

    siganl.signal(siganl.SIGKILL,handler)
    siganl.signal(siganl.SIGHUP,handler)
    internal_api.local_mqtt_session(devs,"APP",iot2app,pp2app)

    sys.taskInit(t1_report)

    sys.taskInit(t2_report)

    sys.taskInit(t3_report)

    -- sys.taskInit(meter_report)

    --启动系统框架
    sys.init(0, 0)
    sys.run()
end

main(arg[1],arg[2])