namespace ZB.MOM.WW.OtOpcUa.Driver.FOCAS;

/// <summary>
///     Fanuc CNC controller series. Used by <see cref="FocasCapabilityMatrix"/> to
///     gate which FOCAS addresses + value ranges the driver accepts against a given
///     CNC — the FOCAS API surface varies meaningfully between series (macro ranges,
///     PMC address letters, parameter numbers). A tag reference that's valid on a
///     30i might be out-of-range on an 0i-MF; validating at driver
///     <c>InitializeAsync</c> time surfaces the mismatch as a fast config error
///     instead of a runtime read failure after the server's already running.
/// </summary>
/// <remarks>
///     <para>Values chosen from the Fanuc FOCAS Developer Kit documented series
///     matrix. Add a new entry + a row to <see cref="FocasCapabilityMatrix"/> when
///     a new controller is targeted — the driver will refuse the device until both
///     sides of the enum are filled in.</para>
///     <para>Defaults to <see cref="Unknown"/> when the operator doesn't specify;
///     the capability matrix treats Unknown as permissive (no range validation,
///     same as pre-matrix behaviour) so old configs don't break on upgrade.</para>
/// </remarks>
public enum FocasCncSeries
{
    /// <summary>No series declared; capability matrix is permissive (legacy behaviour).</summary>
    Unknown = 0,

    /// <summary>Series 0i-D — compact CNC, narrow macro + PMC ranges.</summary>
    Zero_i_D,
    /// <summary>Series 0i-F — successor to 0i-D; widened macro range, added Plus variant.</summary>
    Zero_i_F,
    /// <summary>Series 0i-MF / 0i-MF Plus — machining-centre variants of 0i-F.</summary>
    Zero_i_MF,
    /// <summary>Series 0i-TF / 0i-TF Plus — turning-centre variants of 0i-F.</summary>
    Zero_i_TF,

    /// <summary>Series 16i / 18i / 21i — mid-range legacy; narrow ranges, limited PMC letters.</summary>
    Sixteen_i,

    /// <summary>Series 30i — high-end; widest macro / PMC / parameter ranges.</summary>
    Thirty_i,
    /// <summary>Series 31i — subset of 30i (fewer axes, same FOCAS surface).</summary>
    ThirtyOne_i,
    /// <summary>Series 32i — compact 30i variant.</summary>
    ThirtyTwo_i,

    /// <summary>Power Motion i — motion-control variant; atypical macro coverage.</summary>
    PowerMotion_i,
}
