using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Threading.Tasks;
using TeamAAS_VP.Enums;
using TeamAAS_VP.Models;
using TeamAAS_VP.Models.Calibration;
using TeamAAS_VP.Models.Feeder;
using TeamAAS_VP.Models.Lights;
using TeamAAS_VP.Models.PLC;
using TeamAAS_VP.Models.ScrewDriver;
using TeamAAS_VP.Models.Torque;
namespace TeamAAS_VP.Interfaces
{
///
/// ���ù���������ϵͳ���á�����������ˡ�Feeder��PLC����̨ͨѶ�����õ���ɾ�IJ���־û���
/// ʵ���ฺ�����ڴ���־û��洢�������ļ������ݿ⣩֮��ͬ�����ݣ����ṩͬ�����첽�ļ���/����ӿڡ�
///
public interface IConfigService : IDisposable
{
// Load/Save
///
/// ͬ�������������ã��ӳ־û��洢��ȡ�������ڴ��е����ã���
///
///
/// �÷���Ϊ�������ã�������Ӧ������ʱ����ȷ��Ҫͬ�����صij�����
/// ʵ��Ӧ��֤�ڷ�������ʱ��¼��־���ڱ�Ҫʱ�׳��쳣��֪ͨ���÷���
///
void LoadAll();
///
/// �첽�����������ã��ӳ־û��洢��ȡ�������ڴ��е����ã���
///
/// һ����ʾ�첽���ز���������
Task LoadAllAsync();
///
/// ͬ���������е�ǰ�ڴ��е����õ��־û��洢��
///
///
/// �÷���Ϊ�������ã���������Ҫ������֤���ó־û��ij�����
///
void SaveAll();
///
/// �첽�������е�ǰ�ڴ��е����õ��־û��洢��
///
/// ��ʾ���������ɵ�����
Task SaveAllAsync();
// Cameras
///
/// ��ȡ������ע��������Ϣ��ֻ�����ϡ�
///
/// �����Ϣ��ֻ�����Ͽ��ա�
IReadOnlyCollection GetAllCameras();
///
/// ���ݱ�ʶ��ȡ���������Ϣ��
///
/// �����Ψһ��ʶ����
/// ��Ӧ�� ʵ������δ�ҵ��� null��
CameraInfo GetCamera(Guid id);
///
/// ���������ָ���������Ϣ��
///
/// Ҫ��������µ������Ϣ������Ϊ null��
/// �� Ϊ null ʱ�׳���
CameraInfo AddOrUpdateCamera(CameraInfo camera);
///
/// �Ƴ�ָ����ʶ�������Ϣ��
///
/// Ҫ�Ƴ��������Ψһ��ʶ����
/// ����ҵ����Ƴ��ɹ��� true������ false��
bool RemoveCamera(Guid id);
///
/// �ж��Ƿ����ָ����ʶ��������á�
///
/// ���Ψһ��ʶ����
/// ������ true������ false��
bool ContainsCamera(Guid id);
// Robots
///
/// ��ȡ������ע��Ļ�������Ϣ��ֻ�����ϡ�
///
/// ��������Ϣ��ֻ�����Ͽ��ա�
IReadOnlyCollection GetAllRobots();
///
/// ���ݱ�ʶ��ȡ������������Ϣ��
///
/// �����˵�Ψһ��ʶ����
/// ��Ӧ�� ʵ������δ�ҵ��� null��
RobotInfo GetRobot(Guid id);
///
/// ���������ָ���Ļ�������Ϣ��
///
/// Ҫ��������µĻ�������Ϣ������Ϊ null��
/// �� Ϊ null ʱ�׳���
RobotInfo AddOrUpdateRobot(RobotInfo robot);
///
/// �Ƴ�ָ����ʶ�Ļ�������Ϣ��
///
/// Ҫ�Ƴ��Ļ����˵�Ψһ��ʶ����
/// ����ҵ����Ƴ��ɹ��� true������ false��
bool RemoveRobot(Guid id);
///
/// �ж��Ƿ����ָ����ʶ�Ļ��������á�
///
/// ������Ψһ��ʶ����
/// ������ true������ false��
bool ContainsRobot(Guid id);
///
/// ��ָ��������id�IJ�������
///
/// ������Ψһ��ʶ����
/// ��������
///
bool UpdateRobotStepDistance(Guid id, double stepDistance);
///
/// ��ȡָ��������Id�IJ�������
///
///
///
double GetRobotStepDistance(Guid id);
// Feeders
///
/// ��ȡ������ע��� Feeder ��Ϣ��ֻ�����ϡ�
///
/// Feeder ��Ϣ��ֻ�����Ͽ��ա�
IReadOnlyCollection GetAllFeeders();
///
/// ���ݱ�ʶ��ȡ���� Feeder ��Ϣ��
///
/// Feeder ��Ψһ��ʶ����
/// ��Ӧ�� ʵ������δ�ҵ��� null��
FeederInfo GetFeeder(Guid id);
///
/// ���������ָ���� Feeder ��Ϣ��
///
/// Ҫ��������µ� Feeder ��Ϣ������Ϊ null��
/// �� Ϊ null ʱ�׳���
FeederInfo AddOrUpdateFeeder(FeederInfo feeder);
///
/// �Ƴ�ָ����ʶ�� Feeder ��Ϣ��
///
/// Ҫ�Ƴ��� Feeder ��Ψһ��ʶ����
/// ����ҵ����Ƴ��ɹ��� true������ false��
bool RemoveFeeder(Guid id);
///
/// �ж��Ƿ����ָ����ʶ�� Feeder ���á�
///
/// Feeder Ψһ��ʶ����
/// ������ true������ false��
bool ContainsFeeder(Guid id);
// PLCs
///
/// ��ȡ������ע��� PLC ��Ϣ��ֻ�����ϡ�
///
/// PLC ��Ϣ��ֻ�����Ͽ��ա�
IReadOnlyCollection GetAllPlcs();
///
/// ���ݱ�ʶ��ȡ���� PLC ��Ϣ��
///
/// PLC ��Ψһ��ʶ����
/// ��Ӧ�� ʵ������δ�ҵ��� null��
PlcInfo GetPlc(Guid id);
///
/// ���������ָ���� PLC ��Ϣ��
///
/// Ҫ��������µ� PLC ��Ϣ������Ϊ null��
/// �� Ϊ null ʱ�׳���
PlcInfo AddOrUpdatePlc(PlcInfo plc);
///
/// �Ƴ�ָ����ʶ�� PLC ��Ϣ��
///
/// Ҫ�Ƴ��� PLC ��Ψһ��ʶ����
/// ����ҵ����Ƴ��ɹ��� true������ false��
bool RemovePlc(Guid id);
///
/// �ж��Ƿ����ָ����ʶ�� PLC ���á�
///
/// PLC Ψһ��ʶ����
/// ������ true������ false��
bool ContainsPlc(Guid id);
// Plc Addresses
///
/// Get all PlcAddress entries
///
///
PlcAddressConfig GetPlcAddresses();
// Background TCP
///
/// ��ȡ��̨ͨѶ��TCP/IP�����á�
///
/// ��ǰ��̨ TCP ���ÿ��ա�
BgTcpIP GetBgTcp();
///
/// ���ú�̨ͨѶ��TCP/IP�����ã��������ڴ棩��
///
/// �µĺ�̨ TCP ���ã�����Ϊ null��
/// �� Ϊ null ʱ�׳���
void SetBgTcp(BgTcpIP cfg);
///
/// ����ǰ�ڴ��еĺ�̨ TCP ���ñ��浽�־û��洢��
///
void SaveBgTcp();
// Background Modbus
///
/// ��ȡ��̨ Modbus TCP ���á�
///
/// ��ǰ��̨ Modbus TCP ���ÿ��ա�
BgModbusTcp GetBgModbusTcp();
///
/// ���ú�̨ Modbus TCP ���ã��������ڴ棩��
///
/// �µĺ�̨ Modbus TCP ���ã�����Ϊ null��
/// �� Ϊ null ʱ�׳���
void SetBgModbusTcp(BgModbusTcp cfg);
///
/// ����ǰ�ڴ��еĺ�̨ Modbus TCP ���ñ��浽�־û��洢��
///
void SaveBgModbusTcp();
//ϵͳ����
///
/// ��ȡϵͳ����
///
///
SystemConfiguration GetSystemConfiguration();
///
/// ����ϵͳ����
///
void SaveSystemConfiguration(SystemConfiguration systemConfiguration);
///
/// ��ȡ��ǰ����
///
///
Language GetCurrentLanguage();
///
/// ���õ�ǰ����
///
///
void SetCurrentLanguage(Language language);
//��������
///
/// ��ȡ������������
///
///
IReadOnlyCollection GetAllClearanceTasks();
///
/// �����������������
///
///
///
FeederClearWork AddOrUpdateClearanceTask(FeederClearWork task);
///
/// �Ƴ���������
///
///
///
bool RemoveClearanceTask(Guid id);
///
/// ���������������
///
void ClearAllClearanceTasks();
///
/// �ж��Ƿ����ָ����ʶ����������
///
///
///
bool ContainsClearanceTask(Guid id);
///
/// ���ݱ�ʶ��ȡ��������������Ϣ
///
///
///
FeederClearWork GetClearanceTask(Guid id);
///
/// �ж��Ƿ����ָ����ŵ���������
///
///
///
bool ContainsClearanceTaskByNumber(int taskNumber);
///
/// ���ݱ�Ż�ȡ��������������Ϣ
///
///
///
FeederClearWork GetClearanceTaskByNumber(int taskNumber);
// Light controllers and channels
///
/// ��ȡ������ע��ĵƹ��������Ϣ��ֻ�����ϡ�
///
/// �ƹ��������Ϣ��ֻ�����Ͽ��ա�
IReadOnlyCollection GetAllLightControllers();
///
/// ���ݱ�ʶ��ȡ�����ƹ��������Ϣ��
///
/// �ƹ��������Ψһ��ʶ����
/// ��Ӧ�� ʵ������δ�ҵ��� null��
LightControllerConfig GetLightController(int id);
///
/// ���������ָ���ĵƹ��������Ϣ��
///
/// Ҫ��������µĵƹ��������Ϣ������Ϊ null��
/// �� Ϊ null ʱ�׳���
LightControllerConfig AddOrUpdateLightController(LightControllerConfig controller);
///
/// �Ƴ�ָ����ʶ�ĵƹ��������Ϣ��
///
/// Ҫ�Ƴ��ĵƹ��������Ψһ��ʶ����
/// ����ҵ����Ƴ��ɹ��� true������ false��
bool RemoveLightController(int id);
///
/// �ж��Ƿ����ָ����ʶ�ĵƹ���������á�
///
/// �ƹ������Ψһ��ʶ����
/// ������ true������ false��
bool ContainsLightController(int id);
///
/// ��ȡ������ע��ĵƹ�ͨ����Ϣ��ֻ�����ϡ�
///
/// �ƹ�ͨ����Ϣ��ֻ�����Ͽ��ա�
IReadOnlyCollection GetAllLightChannels();
///
/// ����ȫ��������ȡ�����ƹ�ͨ����Ϣ��
///
/// �ƹ�ͨ����ȫ��������
/// ��Ӧ�� ʵ������δ�ҵ��� null��
ChannelConfig GetLightChannelByGlobalIndex(int globalIndex);
///
/// �ж��Ƿ����ָ��ȫ�������ĵƹ�ͨ�����á�
///
/// �ƹ�ͨ����ȫ��������
/// ������ true������ false��
bool ContainsLightChannelByGlobalIndex(int globalIndex);
///
/// ����ָ���ƹ�ͨ����Ĭ������ֵ�����浽�־û��洢��
///
/// �ƹ�ͨ����ȫ��������
/// �µ�Ĭ������ֵ����ΧӦ�ں��ʵ������ڡ�
/// ����ҵ������³ɹ��� true������ false��
bool UpdateChannelDefaultBrightness(int globalIndex, int brightness);
// Screw driver (single device) configuration accessors
///
/// ��ȡ�������ã����豸����
///
/// ��ǰ�� ����δ������ null��
ScrewDriverConfig GetScrewDriverConfig();
///
/// ���ò��־û��������ã����豸����
///
/// �µ����ö�����Ϊ�ա�
void SetScrewDriverConfig(ScrewDriverConfig cfg);
// Device info - 支持多设备
///
/// 获取所有设备信息配置列表
///
/// 设备信息列表的只读集合
IReadOnlyCollection GetAllDeviceInfos();
///
/// 根据设备编号获取设备信息(兼容旧API,返回第一个设备)
///
DeviceInfo GetDeviceInfo();
///
/// 根据设备编号获取设备信息
///
/// 设备编号
DeviceInfo GetDeviceInfo(int deviceNo);
///
/// 保存设备信息配置(添加或更新)
///
void SaveDeviceInfo(DeviceInfo deviceInfo);
///
/// 保存所有设备信息列表
///
/// 设备信息列表
void SaveAllDeviceInfos(IEnumerable deviceInfoList);
///
/// 添加新设备
///
/// 新添加的设备
DeviceInfo AddDeviceInfo();
///
/// 删除设备
///
/// 设备编号
/// 是否删除成功
bool RemoveDeviceInfo(int deviceNo);
///
/// ������ǰ�ڴ��еĵ������ñ��浽�ļ���
///
void SaveScrewDriverConfig();
// Screw feeder (material) management
///
/// ��ȡ������ע�����˿��������Ϣ��ֻ�����ϡ�
///
IReadOnlyCollection GetAllScrewFeeders();
///
/// ���ݱ�ʶ��ȡ������˿��������Ϣ��
///
ScrewFeederInfo GetScrewFeeder(Guid id);
///
/// ���������ָ������˿��������Ϣ��
///
ScrewFeederInfo AddOrUpdateScrewFeeder(ScrewFeederInfo feeder);
///
/// �Ƴ�ָ����ʶ����˿��������Ϣ��
///
bool RemoveScrewFeeder(Guid id);
///
/// �ж��Ƿ����ָ����ʶ����˿���������á�
///
bool ContainsScrewFeeder(Guid id);
///
/// Ϊָ����������ŵݼ�ָ��������ͨ��Ϊ 1�������������㷵�� false
///
int DecrementScrewCountByFeederNumber(int feederNumber, int decrement = 1);
///
/// ���ָ����������ŵ���˿��Ϣ�����κ���ʣ�������ÿ�/��0��
///
void ClearScrewFeederByNumber(int feederNumber);
///
/// Ϊָ�����������������˿���κţ�����ԭ��ʣ������������һ����������PackSize��
///
void SetBatchForFeederNumber(int feederNumber, string batchNumber);
///
/// ��ȡָ����������ŵ�ʣ����˿�������Ҳ������� -1��
///
int GetRemainingCountByFeederNumber(int feederNumber);
///
/// ��ȡָ����������ŵĵ�������״̬���Ҳ������� false��
///
bool GetLowLevelAlarmStatusByFeederNumber(int feederNumber);
///
/// ��ij����˿������������������ʱ�ᴥ�����¼��������߿������ϱ��� UI ��ʾ��
///
event Action ScrewFeederLowLevelAlarmTriggered;
///
/// ���ʣ����˿�Ƿ�
///
bool CheckAlarm(int feederNumber);
//ˢ����¼
///
/// ��ȡˢ��������
///
///
SerialPortConfig GetCardReaderConfig();
///
/// ����ˢ��������
///
///
void SaveCardReaderConfig(SerialPortConfig config);
void SaveTorqueReaderConfig(TorqueSerialPortConfig config);
TorqueSerialPortConfig GetTorqueReaderConfig();
CTQ_Data GetCTQDataInfo();
void SaveCTQDataInfo(CTQ_Data cd);
}
}