from types import ModuleType
from .cls_type.core import ClsType
from .css_maker import CssMaker
from .database import Database
from .debugs import Debugs
from .exe_packer import ExePacker
from .file import File
from .folder import Folder
from .htmdoc import Htmdoc
from .image import Image, IconYangs, IconHebill
from .mod_path import ModPath
from .mod_type import ModType
from .multilinguals import Multilinguals
from .obj_type import ObjType
from .web_system import WebSystem
from ..types.he import He
from .configs import Configs


class Components(He):
    def cls_type(self, pycls: He | type)-> ClsType: ...
    def configs(self, data=None, end_class=None, start_class=None, file=None)-> Configs: ...
    def css_maker(self, file: str | File = None)-> CssMaker: ...

    def debugs(self)-> Debugs: ...
    def database(self, host: str = None, user: str = None, password: str = None, dbname: str = None, port: int = None, prefix: str = None, connection: str = None, configs:dict=None)-> Database: ...

    def exe_packer(self, mainpy: str, website_module:str=None, one_file:bool=False, one_dir:bool=False, show_console:bool=False, pack_overwrite:bool=False)-> ExePacker: ...

    def file(self, path: str)-> File: ...
    def folder(self, path: str)-> Folder: ...

    def htmdoc(self)-> Htmdoc: ...

    def image(self, source: str)-> Image: ...

    def mod_path(self, name: str | ModuleType | type | He)-> ModPath: ...
    def mod_type(self, pymod: ModuleType | type | He)-> ModType: ...
    def multilinguals(self, end_class: type = None, start_class: type = None, folder: Folder | str = None, hooked_configs: Configs = None, hooked_config_name: str = None)-> Multilinguals: ...

    def obj_type(self, pyobj: He)-> ObjType: ...

    def web_system(self, module: str, host: str=None, port: int=None, db_host: str=None, db_user: str=None, db_password: str=None, db_dbname: str=None, db_port: int=None, db_prefix: str=None, configs:dict=None)-> WebSystem: ...

    @property
    def image_icon_yangs(self) -> IconYangs: ...
    @property
    def image_icon_hebill(self) -> IconHebill: ...
