from . import settings
from typing import Optional, List

class Content:
    Empty: Content
    Splitter: Content
    def __init__(self, c: str) -> Content: ...

class Cell:
    def __init__(self, c: Content) -> Cell:
        self.content: Content
        self.overflow: settings.Overflow
        self.width: Optional[int]
        self.align: settings.Align
        self.padding: settings.Padding
        self.merge: Optional[int]
        self.formatter: List[settings.Formatter]
    
    def with_content(self, content: Content) -> Cell: ...
    def with_overflow(self, overflow: settings.Overflow) -> Cell: ...
    def with_width(self, width: Optional[int]) -> Cell: ...
    def with_align(self, align: settings.Align) -> Cell: ...
    def with_padding(self, padding: settings.Padding) -> Cell: ...
    def with_merge(self, merge: Optional[int]) -> Cell: ...
    def with_formatter(self, formatter: List[settings.Formatter]) -> Cell: ...
    def append_formatter(self, formatter: List[settings.Formatter]): ...
    def with_appended_formatter(self, formatter: List[settings.Formatter]) -> Cell: ...


class Table:
    def __init__(self, data: List[List[Cell]]) -> Table:
        self.table: List[List[Cell]]
        self.border: settings.Border
    @staticmethod
    def create(header: List[Cell], content: List[List[Cell]], splitter: bool) -> Table: ...

    def with_border(self, border: settings.Border) -> Table: ...
    def render(self, setting: settings.Renderer) -> str: ...