from ......types.he import He
from .... import DatabaseMysql
from ... import Tables
from .. import Table
from ....configs import Configs
from ....queries import Queries
from ....queries.plugins.columns import Columns
from ....queries.plugins.conditions import Conditions
from ....queries.plugins.limits import Limits
from ....queries.plugins.orders import Orders
from .quantity import Quantity
from .drop import Drop
from .update import Update
from .select import Select
from .pagination_select import PaginationSelect


class Data(He):
    def __init__(self, u: Tables, name: str): ...
    @property
    def __database__(self)-> DatabaseMysql: ...
    @property
    def __tables__(self)-> Tables: ...
    @property
    def __table__(self)-> Table: ...
    @property
    def __configs__(self)-> Configs: ...
    @property
    def __queries__(self)-> Queries: ...

    def quantity_obj(self, conditions: Conditions = None)-> Quantity: ...
    def quantity(self, conditions: Conditions = None)-> bool: ...
    def drop_obj(self, conditions: Conditions = None)-> Drop: ...
    def drop(self, conditions: Conditions = None)-> bool: ...
    def insert(self, data: dict, user: str = None, keywords: list | str = None)-> bool: ...
    def update_obj(self, conditions: Conditions = None)-> Update: ...
    def update(self, data: dict, conditions: Conditions = None)-> bool: ...
    def select_obj(self, columns: Columns = None, conditions: Conditions = None, orders: Orders = None, limits: Limits = None)-> Select: ...
    def select(self, columns: Columns = None, conditions: Conditions = None, orders: Orders = None, limits: Limits = None)-> bool: ...
    def pagination_select_obj(self, columns: Columns = None, conditions: Conditions = None, orders: Orders = None)-> PaginationSelect: ...
    def pagination_select(self, page_number: int, items_per_page: int, columns: Columns = None, conditions: Conditions = None, orders: Orders = None)-> bool: ...
