using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ZEISS.MTB.Api;

namespace ZeissMicroscopeAPI
{
    public interface IMicroscope: IDisposable
    {
        bool hasMicroscope          { get; }
        bool hasMTBConnection       { get; }            // 连接接口
        bool hasMTBID               { get; }            // 模块序号
        bool hasManager             { get; }            // 控制模块
        bool hasMTBModules          { get; }            // 全部模块
        bool IsValid                { get; }
        bool IsAvailable            { get; }
        bool IsOpen                 { get; }
        int  Accessibility          { get; }
        bool IsLogin                { get; }
        bool IsInit                 { get; }
        string MicroscopeType       { get; }               // 蔡司显微镜型号
        string MicroscopeVersion    { get; }               // 蔡司显微镜版本
        string MicroscopeID         { get; }               // 蔡司显微镜序号
        bool   IsSucceed            { get; }               // 当前加载状态
        int    DeviceID             { get; set; }
        string MTBAxisUnit          { get; set; }               // 显微镜轴移动单位
        string MTBUnit              { get; set; }               // 显微镜默认单位
        string MTBSpeedUnit         { get; set; }               // 显微镜速度单位
        string MTBLightUnit         { get; set; }               // 显微镜光源单位
        IMTBDevice ZeissMicroscope { get; }
        int Open    ();
        int Close   ();
        int ReOpen  ();
        int Init    ();
        int Login   ();
        int Logout  ();
        void initManager    ();
        void deleManager    ();
        void initMTBModules ();
        void deleMTBModules ();

        string[]      ComponentIDs  (                   );
        int           getDeviceCount(                   );
        IMTBComponent           Handler        (string ComponentID );
        IMTBFocus               FocusHandler        { get; }
        IMTBAxis                AxisHandler         { get; }
        IMTBMove                MoveHandler         { get; }
        IMTBContinualSpeed      SpeedHandler        { get; }
        IMTBChanger             RLTLHandler         { get; }
        IMTBObjectiveChanger    ObjectiveHandler    { get; }
        IMTBLamp                LampHandler         { get; }
        IMTBServo               ApblHandler         { get; }
        IMTBServo               LfblHandler         { get; }

        IMTBContrastChangerProperties               MTBCondenserProperties                  { get; }
        IMTBEyepiece                                MTBEyePiece                             { get; }
        IMTBFocus                                   MTBFocus                                { get; }
        IMTBMicroscopeManager                       MTBMicroscopeManager                    { get; }
        IMTBObject                                  MTBObject                               { get; }
        IMTBObjectiveChanger                        MTBObjectiveChanger                     { get; }
        IMTBChanger                                 MTBRLTLSwitch                           { get; }
        IMTBServo                                   MTBTLFieldStop                          { get; }
        IMTBFilterChanger                           MTBTLFilterChanger1                     { get; }
        IMTBFilterChanger                           MTBTLFilterChanger2                     { get; }
        IMTBLamp                                    MTBTLHalogenLamp                        { get; }
        IMTBFilterChanger                           MTBTLVirtualFilterChanger               { get; }
    }
}
