using System.Collections.Generic;
using System.Threading.Tasks;
using Repository.Models;

namespace Repository.BackendRepository.Interface
{
    public interface INiagaraDataSynchronizeRepository : IBackendRepository
    {
        /// <summary>
        /// 同步N4至資料表 import_niagara_tag
        /// </summary>
        /// <param name="ds"></param>
        /// <param name="building"></param>
        /// <returns></returns>
        Task InsertNiagaraTagList(List<Device_value> ds, List<string> building, string tag_quantity);


        /// <summary>
        /// 獲取照明開關 是否在 device_node 層
        /// </summary>
        /// <returns></returns>
        Task<string> getLightSwitchLevel();

        /// <summary>
        /// 同步N4至資料表 import_niagara_item
        /// </summary>
        /// <param name="ds"></param>
        /// <param name="building"></param>
        /// <returns></returns>
        Task InsertItemFromNiagara(List<ImpNiaItem> ds, List<string> building);
        /// <summary>
        /// 比對 device
        /// </summary>
        /// <returns></returns>
        Task DeviceComparison(string LightSwitchLevel);
        /// <summary>
        ///檢查Device與import_niagara_tag 的Full_Name是否相同 不同則Full_Name從import_niagara_tag 覆蓋至device
        /// </summary>
        /// <returns></returns>
        Task CheckDiffFullNameAndCover();

        Task CheckItemIsShowHistory();


        /// <summary>
        /// 比對 device的FullName,若為空則以DeviceName取代
        /// </summary>
        /// <returns></returns>
        Task CheckFullNameEmptyReplaceByDeviceName();
        /// <summary>
        /// 比對 device_item
        /// </summary>
        /// <returns></returns>
        Task DeviceItemComparison();
        /// <summary>
        /// 比對 device_item full_name 與 import_niagara_item是否相同
        /// 不同則覆蓋
        /// </summary>
        /// <returns></returns>
        Task CheckItemDiffFullNameAndCover();

        Task ItemCheckFullNameEmptyReplaceByDeviceName();
        /// <summary>
        /// 新增資料至 buildingMenu
        /// </summary>
        /// <returns></returns>
        Task InsertBuildingMenu();
        /// <summary>
        /// 新增資料至 subSystemFloor
        /// </summary>
        /// <returns></returns>
        Task InsertSubSystemFloor();
    }
}