@{
    ViewData["MainNum"] = "2";
    ViewData["SubNum"] = "3";
    ViewData["Title"] = "Niagara資料同步";
}

<ol class="breadcrumb page-breadcrumb">
    <li class="breadcrumb-item"><a href="javascript:void(0);">首頁</a></li>
    <li class="breadcrumb-item">設備管理</li>
    <li class="breadcrumb-item active">Niagara資料同步</li>
    <li class="position-absolute pos-top pos-right d-none d-sm-block"><span class="js-get-date"></span></li>
</ol>

<div class="row">
    <div class="col-xl-12">
        <div id="panel-5" class="panel">
            <div class="panel-container show">
                <div class="panel-content">

                    <div class="form-row align-items-center">
                        <div class="col-12 mb-3">
                            <div class="custom-control custom-radio custom-control-inline">
                                <input type="radio" id="Building_B" name="Building" value="B" class="custom-control-input">
                                <label class="custom-control-label" for="Building_B"></label>
                            </div>
                            @*<div class="custom-control custom-radio custom-control-inline">
                                <input type="radio" id="Building_O" name="Building" value="O" class="custom-control-input">
                                <label class="custom-control-label" for="Building_O">辦公棟</label>
                            </div>*@
                        </div>
                    </div>

                    <div class="form-row align-items-center">
                        <button id="loadDataBtn" type="button" class="btn btn-primary" onclick="LoadData()">載入資料</button>
                        <button id="synchornizeDataBtn" type="button" class="btn btn-dark" onclick="SynchronizeData()">同步資料</button>
                    </div>

                    <br />
                    <br />

                    <div class="form-row align-items-center">
                        <p id="loadDataText"></p>
                    </div>

                    <div class="mb-5">
                        <div class="card p-3 w-100">
                            <div class="card-header d-flex align-items-center flex-wrap">
                                <div class="card-title">
                                    Niagara資料
                                </div>
                            </div>
                            <div class="card-body row">
                                <div class="col-12">
                                    <!-- datatable start -->
                                    <table id="niagara_data_table" class="table table-bordered table-hover m-0 text-center">
                                        <thead class="thead-themed">
                                            <tr>
                                                <th>value</th>
                                                <th>tag_name</th>
                                                <th>point_name</th>
                                            </tr>
                                        </thead>
                                        <tbody>
                                        </tbody>
                                    </table>
                                </div>
                            </div>
                        </div>
                    </div>

                </div>
            </div>
        </div>
    </div>
</div>

@section Scripts {
    <script>
        var buildingId, building;
        var rawDataImportTable;
        var ds;

        var today = new Date();
        var date = today.getFullYear() + '-' + (today.getMonth() + 1) + '-' + today.getDate();

        $(function () {
            ds = null;
            document.getElementById("Building_B").checked = true;

            projectName();
            rawDataImportTable = $("#niagara_data_table").DataTable({
                "columns": [
                    {
                        "data": "value"
                    },
                    {
                        "data": "tag_name"
                    },
                    {
                        "data": "point_name"
                    },
                ],
                "ajax": {
                    "url": "/NiagaraDataSynchronize/RawDataList",
                    "type": "POST",
                    "dataSrc": function (rel) {
                        if (rel.code == "9999") {
                            toast_error(rel.msg);
                            document.getElementById('loadDataText').innerText = "載入資料出錯了!";
                            return;
                        }

                        var data = rel.data;
                        ds = data;
                        console.log(ds)
                        if (data == null || data.length == 0) {
                            this.data = [];
                            document.getElementById('loadDataText').innerText = "";
                        }
                        else if(data.length > 0) { 
                            var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();
                            var dateTime = date + ' ' + time;
                            document.getElementById('loadDataText').innerText = "共 " + rel.data.length + " 筆資料 \n" + dateTime;
                        }
                        return data;
                    }
                }
            });
        });

        //#region 載入Niagara資料
        function LoadData() {
            document.getElementById('loadDataText').innerText = "Loading...";
            buildingId = document.querySelector('input[name="Building"]:checked').value;
            if (buildingId == "B") {
                //building = "B1";
                rawDataImportTable.ajax.reload();
            }
        }
        //#endregion

        function SynchronizeData() {
            if (ds.length > 0) {
                document.getElementById('loadDataText').innerText = "同步中...";
                showSpinner();
                //比對資料,有差異的話,再同步到device等資料表
                var url_synchronize_data = "/NiagaraDataSynchronize/CompareData/";

                $.each(ds, function (i, v) {
                    v.building = building;
                })

                $.ajax({
                    method: "POST",
                    url: url_synchronize_data,
                    data: JSON.stringify(ds),
                    cache: false,
                    async: true,
                    contentType: "application/json; charset=UTF-8",
                    dataType: 'json',
                    success: function (rel) {
                        if (rel.code != "0000") {
                            hideSpinner();
                            toast_error(rel.msg);
                            document.getElementById('loadDataText').innerText = "比對資料出錯了!";
                            return;
                        }

                        SyncDevItem();
                        //var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();
                        //var dateTime = date + ' ' + time;
                        //document.getElementById('loadDataText').innerText = "比對完成 \n" + dateTime;
                    },
                    error: function () {
                        hideSpinner();
                    }
                });
            }
            else {
                document.getElementById('loadDataText').innerText = "查無資料 無法比對!";
            }
        }

        function SyncDevItem()
        {
            //比對資料,有差異的話,再同步到device等資料表
            var url_synchronize_data = "/NiagaraDataSynchronize/RawDataDevItemList/";
            var url_synchronize_data_device_item = "/NiagaraDataSynchronize/DevItemInsert/";
            
            let object = {};
            let dataLength = 0;
            let curData = {};
            let asyncSendData = [];
            let contentLength = 5000;
            object.building = building;

            //device async
            $.ajax({ 
                method: "POST",
                url: url_synchronize_data,
                cache: false,
                async: false,
                contentType: "application/json; charset=UTF-8",
                data: JSON.stringify(object),
                dataType: 'json',
                success: function (rel) {
                    if (rel.code != "0000") {
                        hideSpinner();
                        toast_error(rel.msg);
                        document.getElementById('loadDataText').innerText = "比對資料出錯了!";
                        return;
                    }

                    //history async
                    $.ajax({ 
                        method: "POST",
                        url: '/NiagaraDataSynchronize/GetHistoryData/',
                        cache: false,
                        async: false,
                        contentType: "application/json; charset=UTF-8",
                        success: function (res) {
                            if (res.code != "0000") {
                                hideSpinner();
                                toast_error(res.msg);
                                document.getElementById('loadDataText').innerText = "比對資料出錯了!";
                                return;
                            }

                            curData = rel.data;
                            let relDataLength = curData.length;
                            $.each(rel.data, function (index, val) {
                                if (relDataLength > 0) {
                                    //push data, counting
                                    asyncSendData.push(val); 
                                    dataLength++;
                                    relDataLength--;

                                    if (dataLength >= contentLength || relDataLength <= 0) {
                                        //device_item async-insert
                                        $.ajax({
                                            method: "POST",
                                            url: url_synchronize_data_device_item,
                                            data: JSON.stringify(asyncSendData),
                                            cache: false,
                                            async: false,
                                            contentType: "application/json; charset=UTF-8",
                                            dataType: 'json',
                                            success: function (rel) {
                                                if (rel.code != "0000") {
                                                    toast_error(rel.msg);
                                                    hideSpinner();
                                                    document.getElementById('loadDataText').innerText = "比對資料出錯了!";
                                                    return;
                                                }

                                                //reset variable
                                                dataLength = 0;
                                                asyncSendData = [];

                                                //device_item async-compare
                                                if (relDataLength <= 0) {
                                                    $.ajax({
                                                        method: "POST",
                                                        url: '/NiagaraDataSynchronize/DevIteComData/',
                                                        cache: false,
                                                        async: false,
                                                        contentType: "application/json; charset=UTF-8",
                                                        success: function (rel) {
                                                            if (rel.code != "0000") {
                                                                toast_error(rel.msg);
                                                                hideSpinner();
                                                                document.getElementById('loadDataText').innerText = "比對資料出錯了!";
                                                                return;
                                                            }
                                                            
                                                            hideSpinner();
                                                            console.log(rel);
                                                            var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();
                                                            var dateTime = date + ' ' + time;
                                                            document.getElementById('loadDataText').innerText = "比對完成 \n" + dateTime;
                                                        },
                                                        error: function () {
                                                            hideSpinner();
                                                            document.getElementById('loadDataText').innerText = "比對資料出錯了!";
                                                            return;
                                                        }
                                                    })
                                                }
                                            },
                                            error: function () {
                                                hideSpinner();
                                                document.getElementById('loadDataText').innerText = "比對資料出錯了!";
                                                return;
                                            }
                                        })
                                    }
                                }
                            });
                            
                        },
                        error: function () {
                            hideSpinner();
                            document.getElementById('loadDataText').innerText = "比對資料出錯了!";
                            return;
                        }
                    })
                    
                    var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds();
                    var dateTime = date + ' ' + time;
                    document.getElementById('loadDataText').innerText = "比對完成 \n" + dateTime;
                },
            });
        }

        function projectName()
        {
            $.post("/Variable/ProjectName", null, function (rel) {
                building = "B1";
                if (rel.code != "0000") {
                    toast_error(rel.msg);
                    return;
                }

                if (rel.data != null) {
                    building = rel.data.system_value.split('/')[1];
                    $(`label[for='Building_B']`).html(rel.data.system_key + building);
                }
                else
                {
                    $(`label[for='Building_B']`).html('三菱B1');
                }
            }, 'json');
        }
    </script>
}