from dataclasses import dataclass

from kiutils.items.common import Effects as Effects
from kiutils.items.common import Fill as Fill
from kiutils.items.common import Position as Position
from kiutils.items.common import Stroke as Stroke
from kiutils.utils.strings import dequote as dequote

@dataclass
class SyArc:
    private: bool = ...
    start: Position = ...
    mid: Position = ...
    end: Position = ...
    stroke: Stroke = ...
    fill: Fill = ...
    @classmethod
    def from_sexpr(cls, exp: list) -> SyArc: ...
    def to_sexpr(self, indent: int = 6, newline: bool = True) -> str: ...

@dataclass
class SyCircle:
    private: bool = ...
    center: Position = ...
    radius: float = ...
    stroke: Stroke = ...
    fill: Fill = ...
    @classmethod
    def from_sexpr(cls, exp: list) -> SyCircle: ...
    def to_sexpr(self, indent: int = 6, newline: bool = True) -> str: ...

@dataclass
class SyCurve:
    points: list[Position] = ...
    stroke: Stroke = ...
    fill: Fill = ...
    @classmethod
    def from_sexpr(cls, exp: list) -> SyCurve: ...
    def to_sexpr(self, indent: int = 6, newline: bool = True) -> str: ...

@dataclass
class SyPolyLine:
    points: list[Position] = ...
    stroke: Stroke = ...
    fill: Fill = ...
    @classmethod
    def from_sexpr(cls, exp: list) -> SyPolyLine: ...
    def to_sexpr(self, indent: int = 6, newline: bool = True) -> str: ...

@dataclass
class SyRect:
    private: bool = ...
    start: Position = ...
    end: Position = ...
    stroke: Stroke = ...
    fill: Fill = ...
    @classmethod
    def from_sexpr(cls, exp: list) -> SyRect: ...
    def to_sexpr(self, indent: int = 6, newline: bool = True) -> str: ...

@dataclass
class SyText:
    text: str = ...
    position: Position = ...
    effects: Effects = ...
    @classmethod
    def from_sexpr(cls, exp: list) -> SyText: ...
    def to_sexpr(self, indent: int = 6, newline: bool = True) -> str: ...

@dataclass
class SyTextBox:
    text: str = ...
    private: bool = ...
    position: Position = ...
    size: Position = ...
    stroke: Stroke = ...
    fill: Fill = ...
    effects: Effects = ...
    uuid: str | None = ...
    @classmethod
    def from_sexpr(cls, exp: list) -> SyTextBox: ...
    def to_sexpr(self, indent: int = 2, newline: bool = True) -> str: ...
