namespace aos.testing;

enum BaseType : byte {
    None,
    UType,
    Bool,
    Byte,
    UByte,
    Short,
    UShort,
    Int,
    UInt,
    Long,
    ULong,
    Float,
    Double,
    String,
    Vector,
    Obj,     // Used for tables & structs.
    Union,
    Array
}

enum NonConsecutive : int {
  Zero = 0,
  Big = 10000000,
}

table Location {
  name:string (id: 0);
  type:string (id: 1);
  frequency:int (id: 2);
  max_size:int (id: 3);
}

table Map {
  match:Location (id: 0);
  rename:Location (id: 1);
}

table Application {
  name:string (id: 0);
  priority:int (id: 1);
  maps:[Map] (id: 2);
  long_thingy:uint64 (id: 3);
}

table VectorOfStrings {
  str:[string] (id: 0);
}

table VectorOfVectorOfString {
  v:[VectorOfStrings] (id: 0);
}

struct FooStructNested {
  foo_byte:byte;
}

struct FooStruct {
  foo_byte:byte;
  nested_struct:FooStructNested;
}

struct ScalarSweepStruct {
  foo_float:float;
  foo_double:double;
  foo_int32:int32;
  foo_uint32:uint32;
  foo_int64:int64;
  foo_uint64:uint64;
}

struct StructEnum {
  foo_enum:BaseType;
}

table Configuration {
  locations:[Location] (id: 0);
  maps:[Map] (id: 1);
  apps:[Application] (id: 2);
  imports:[string] (id: 3);

  // 8 bit: byte ubyte bool
  // 16 bit: short ushort
  // 32 bit: int uint float
  // 64 bit: long ulong double

  // Simple values.
  foo_byte:byte (id: 4);
  foo_ubyte:ubyte (id: 5);
  foo_bool:bool (id: 6);

  foo_short:short (id: 7);
  foo_ushort:ushort (id: 8);

  foo_int:int (id: 9);
  foo_uint:uint (id: 10);

  foo_long:long (id: 11);
  foo_ulong:ulong (id: 12);

  foo_float:float (id: 13);
  foo_double:double (id: 14);

  foo_string:string (id: 15);

  foo_enum:BaseType (id: 16);
  foo_enum_default:BaseType = None (id: 17);

  // Test vectors now.
  vector_foo_byte:[byte] (id: 18);
  vector_foo_ubyte:[ubyte] (id: 19);
  vector_foo_bool:[bool] (id: 20);

  vector_foo_short:[short] (id: 21);
  vector_foo_ushort:[ushort] (id: 22);

  vector_foo_int:[int] (id: 23);
  vector_foo_uint:[uint] (id: 24);

  vector_foo_long:[long] (id: 25);
  vector_foo_ulong:[ulong] (id: 26);

  vector_foo_float:[float] (id: 27);
  vector_foo_double:[double] (id: 28);

  vector_foo_string:[string] (id: 29);

  vector_foo_enum:[BaseType] (id: 30);

  // And a simple nested application.
  single_application:Application (id: 31);

  // And nest this object to get some crazy coverage.
  nested_config:Configuration (id: 32);

  vov:VectorOfVectorOfString (id: 33);

  foo_struct:FooStruct (id: 34);
  vector_foo_struct:[FooStruct] (id: 35);
  foo_struct_enum:StructEnum (id: 36);
  foo_struct_scalars:ScalarSweepStruct (id: 37);
  vector_foo_struct_scalars:[ScalarSweepStruct] (id: 38);

  foo_enum_nonconsecutive:NonConsecutive (id: 39);
  foo_enum_nonconsecutive_default:NonConsecutive = Big (id: 40);
}

root_type Configuration;
