from __future__ import annotations

import flatbuffers
import numpy as np

import typing
from MyGame.Example.NestedStruct import NestedStruct, NestedStructT
from MyGame.Example.TestEnum import TestEnum

uoffset: typing.TypeAlias = flatbuffers.number_types.UOffsetTFlags.py_type

class ArrayStruct(object):
  @classmethod
  def SizeOf(cls) -> int: ...

  def Init(self, buf: bytes, pos: int) -> None: ...
  def A(self) -> float: ...
  def B(self, i: int) -> typing.List[int]: ...
  def BAsNumpy(self) -> np.ndarray: ...
  def BLength(self) -> int: ...
  def BIsNone(self) -> bool: ...
  def C(self) -> int: ...
  def D(self, i: int) -> NestedStruct | None: ...
  def DLength(self) -> int: ...
  def DIsNone(self) -> bool: ...
  def E(self) -> int: ...
  def F(self, i: int) -> typing.List[int]: ...
  def FAsNumpy(self) -> np.ndarray: ...
  def FLength(self) -> int: ...
  def FIsNone(self) -> bool: ...
class ArrayStructT(object):
  a: float
  b: typing.List[int]
  c: int
  d: typing.List[NestedStructT]
  e: int
  f: typing.List[int]
  def __init__(
    self,
    a: float = ...,
    b: typing.List[int] | None = ...,
    c: int = ...,
    d: typing.List['NestedStructT'] | None = ...,
    e: int = ...,
    f: typing.List[int] | None = ...,
  ) -> None: ...
  @classmethod
  def InitFromBuf(cls, buf: bytes, pos: int) -> ArrayStructT: ...
  @classmethod
  def InitFromPackedBuf(cls, buf: bytes, pos: int = 0) -> ArrayStructT: ...
  @classmethod
  def InitFromObj(cls, arrayStruct: ArrayStruct) -> ArrayStructT: ...
  def _UnPack(self, arrayStruct: ArrayStruct) -> None: ...
  def Pack(self, builder: flatbuffers.Builder) -> None: ...

def CreateArrayStruct(builder: flatbuffers.Builder, a: float, b: int, c: int, d_a: int, d_b: typing.Literal[TestEnum.A, TestEnum.B, TestEnum.C], d_c: typing.Literal[TestEnum.A, TestEnum.B, TestEnum.C], d_d: int, e: int, f: int) -> uoffset: ...

