from dataclasses import dataclass

from kiutils.footprint import Footprint as Footprint
from kiutils.items.brditems import *
from kiutils.items.common import Group as Group
from kiutils.items.common import Image as Image
from kiutils.items.common import Net as Net
from kiutils.items.common import PageSettings as PageSettings
from kiutils.items.common import TitleBlock as TitleBlock
from kiutils.items.dimensions import Dimension as Dimension
from kiutils.items.gritems import *
from kiutils.items.zones import Zone as Zone
from kiutils.misc.config import KIUTILS_CREATE_NEW_GENERATOR_STR as KIUTILS_CREATE_NEW_GENERATOR_STR
from kiutils.misc.config import KIUTILS_CREATE_NEW_VERSION_STR as KIUTILS_CREATE_NEW_VERSION_STR
from kiutils.utils import sexpr as sexpr
from kiutils.utils.strings import dequote as dequote

@dataclass
class Board:
    version: str = ...
    generator: str = ...
    general: GeneralSettings = ...
    paper: PageSettings = ...
    titleBlock: TitleBlock | None = ...
    layers: list[LayerToken] = ...
    setup: SetupData = ...
    properties: dict[str, str] = ...
    nets: list[Net] = ...
    footprints: list[Footprint] = ...
    graphicItems: list = ...
    traceItems: list = ...
    zones: list[Zone] = ...
    dimensions: list[Dimension] = ...
    targets: list[Target] = ...
    groups: list[Group] = ...
    filePath: str | None = ...
    @classmethod
    def from_sexpr(cls, exp: list) -> Board: ...
    @classmethod
    def from_file(cls, filepath: str, encoding: str | None = None) -> Board: ...
    @classmethod
    def create_new(cls) -> Board: ...
    def to_file(self, filepath=None, encoding: str | None = None): ...
    def to_sexpr(self, indent: int = 0, newline: bool = True) -> str: ...
