# This file is part of the faebryk project
# SPDX-License-Identifier: MIT

# This file is auto-generated by zig.
# Do not edit this file directly; edit the corresponding
# Zig file instead.

from enum import Enum, IntEnum  # noqa: F401
from typing import Any  # noqa: F401

from faebryk.core.zig.gen.sexp.pcb import Xy
from faebryk.core.zig.gen.sexp.schematic import (
    Arc,
    Fill,
    PinNames,
    Polyline,
    Property,
    Rect,
    Stroke,
    SymbolPin,
)

# Dirty hack to not error in ruff check
type Allocator = Any

class Circle:
    center: Xy
    radius: float
    stroke: Stroke
    fill: Fill

    def __init__(
        self, *, center: Xy, radius: float, stroke: Stroke, fill: Fill
    ) -> None: ...
    def __repr__(self) -> str: ...
    @staticmethod
    def __field_names__() -> list[str]: ...
    def __zig_address__(self) -> int: ...

class SymbolUnit:
    name: str
    polylines: list[Polyline]
    circles: list[Circle]
    rectangles: list[Rect]
    arcs: list[Arc]
    pins: list[SymbolPin]

    def __init__(
        self,
        *,
        name: str,
        polylines: list[Polyline],
        circles: list[Circle],
        rectangles: list[Rect],
        arcs: list[Arc],
        pins: list[SymbolPin],
    ) -> None: ...
    def __repr__(self) -> str: ...
    @staticmethod
    def __field_names__() -> list[str]: ...
    def __zig_address__(self) -> int: ...

class Symbol:
    name: str
    power: bool
    propertys: list[Property]
    pin_numbers: str | None
    pin_names: PinNames | None
    in_bom: bool | None
    on_board: bool | None
    symbols: list[SymbolUnit]
    convert: int | None

    def __init__(
        self,
        *,
        name: str,
        power: bool,
        propertys: list[Property],
        pin_numbers: str | None,
        pin_names: PinNames | None,
        in_bom: bool | None,
        on_board: bool | None,
        symbols: list[SymbolUnit],
        convert: int | None,
    ) -> None: ...
    def __repr__(self) -> str: ...
    @staticmethod
    def __field_names__() -> list[str]: ...
    def __zig_address__(self) -> int: ...

class SymbolLib:
    version: int
    generator: str
    symbols: list[Symbol]

    def __init__(
        self, *, version: int, generator: str, symbols: list[Symbol]
    ) -> None: ...
    def __repr__(self) -> str: ...
    @staticmethod
    def __field_names__() -> list[str]: ...
    def __zig_address__(self) -> int: ...

class SymbolFile:
    kicad_sym: SymbolLib

    def __init__(self, *, kicad_sym: SymbolLib) -> None: ...
    def __repr__(self) -> str: ...
    @staticmethod
    def __field_names__() -> list[str]: ...
    def __zig_address__(self) -> int: ...
    @staticmethod
    def loads(*, arg_0: Allocator, arg_1: Any) -> SymbolFile: ...
    @staticmethod
    def dumps(*, arg_0: SymbolFile, arg_1: Allocator, arg_2: Any) -> None: ...
    def free(self, *, arg_0: Allocator) -> None: ...

# Module-level functions
def loads(data: str) -> SymbolFile: ...
def dumps(obj: SymbolFile) -> str: ...
