namespace Aitex.Core.RT.IOCore;

public interface IIOAccessor
{
    /// <summary>
    /// IO名称。
    /// </summary>
    string Name { get; }

    /// <summary>
    /// IO类型。
    /// <br/>
    /// 取值请参考：<see cref="IOType"/>
    /// </summary>
    IOType Type { get; }

    /// <summary>
    /// 当前IO在Buffer中的偏移值。
    /// </summary>
    int Index { get; }

    /// <summary>
    /// IO地址。
    /// </summary>
    string Addr { get; }

    /// <summary>
    /// IO数据源设备。
    /// </summary>
    string Provider { get; set; }

    /// <summary>
    /// 当前IO所在数据块索引号。
    /// </summary>
    /// <remarks>
    /// 通过索引号找到Block定义，进而找到对应的PLC数据块。
    /// </remarks>
    int BlockIndex { get; set; }

    int BlockOffset { get; set; }

    /// <summary>
    /// 当前IO是否显示在点表中。
    /// </summary>
    bool Visible { get; set; }

    /// <summary>
    /// IO描述。
    /// </summary>
    string Description { get; set; }
    
    object NonTypedValue { get; }

    /// <summary>
    /// IO序号的起始值。。
    /// </summary>
    string StringIndex { get; }

    int IoTableIndex { get; set; }

    bool DisableImmediatelyCache { get; }
    
    /// <summary>
    /// 设置当前IO所绑定的数据缓冲区。
    /// </summary>
    /// <param name="buffer">数据缓冲区数组。</param>
    void BindBuffer(object buffer);
}