using AyCode.Services.SignalRs;

namespace AyCode.Services.Server.Tests.SignalRs;

/// <summary>
/// SignalR message tags for testing.
/// </summary>
public abstract class TestSignalRTags : AcSignalRTags
{
    // Primitive parameter tags
    public const int SingleIntParam = 100;
    public const int TwoIntParams = 101;
    public const int BoolParam = 102;
    public const int StringParam = 103;
    public const int GuidParam = 104;
    public const int EnumParam = 105;
    public const int NoParams = 107;
    public const int MultipleTypesParams = 109;
    public const int ThrowsException = 110;
    
    // Extended primitives
    public const int DecimalParam = 140;
    public const int DateTimeParam = 141;
    public const int DoubleParam = 143;
    public const int LongParam = 144;
    
    // Complex object parameter tags (using shared DTOs from Core.Tests)
    public const int TestOrderItemParam = 120;
    public const int TestOrderParam = 121;
    public const int SharedTagParam = 122;
    
    // Collection parameter tags
    public const int IntArrayParam = 130;
    public const int GuidArrayParam = 131;
    public const int StringListParam = 132;
    public const int TestOrderItemListParam = 133;
    public const int IntListParam = 134;
    public const int BoolArrayParam = 135;
    public const int MixedWithArrayParam = 136;
    public const int NestedListParam = 151;
    
    // Extended array/collection parameter tags for comprehensive testing
    public const int LongArrayParam = 170;
    public const int DecimalArrayParam = 171;
    public const int DateTimeArrayParam = 172;
    public const int EnumArrayParam = 173;
    public const int DoubleArrayParam = 174;
    public const int SharedTagArrayParam = 175;
    public const int DictionaryParam = 176;
    public const int ObjectArrayParam = 177;
    
    // Mixed parameter scenarios
    public const int IntAndDtoParam = 160;
    public const int DtoAndListParam = 161;
    public const int ThreeComplexParams = 162;
    public const int FiveParams = 164;
    
    // Async Task<T> method tags - critical for testing async handling
    public const int AsyncTestOrderItemParam = 200;
    public const int AsyncStringParam = 201;
    public const int AsyncNoParams = 202;
    public const int AsyncIntParam = 203;
    
    // Task.FromResult method tags - CRITICAL for testing non-async methods returning Task
    // These methods do NOT have AsyncStateMachineAttribute but return Task<T>
    public const int TaskFromResultStringParam = 210;
    public const int TaskFromResultTestOrderItemParam = 211;
    public const int TaskFromResultIntParam = 212;
    public const int TaskFromResultNoParams = 213;
    
    // Binary serialization with GenericAttributes test
    public const int GenericAttributesParam = 220;
    public const int GenericAttributesListParam = 221;
    
    // Large dataset / List tests
    public const int TestOrderListParam = 230;
    
    // Property mismatch tests (Server has more properties than Client)
    // Tests SkipValue string interning bug fix
    public const int PropertyMismatchParam = 240;
    public const int PropertyMismatchListParam = 241;
    public const int PropertyMismatchNestedParam = 242;
    public const int PropertyMismatchNestedListParam = 243;
    
    // DataSource CRUD tags
    public const int DataSourceGetAll = 300;
    public const int DataSourceGetItem = 301;
    public const int DataSourceAdd = 302;
    public const int DataSourceUpdate = 303;
    public const int DataSourceRemove = 304;
    
    // StockTaking production bug reproduction
    public const int GetStockTakings = 400;
    
    // Default parameter tests
    public const int TwoParamsWithDefault = 410;
    
    // Expression filter DataSource GetAll
    public const int ExpressionDataSourceGetAll = 500;
    
    // IQueryable filter DataSource GetAll (demonstrates EF Core-like usage)
    public const int QueryableDataSourceGetAll = 501;
    
    // IQueryable aggregate query (Count, Sum, etc.) - returns scalar value
    public const int QueryableDataSourceAggregate = 502;
}
