from typing import Any, Dict, List, Optional, Tuple, Type, Union

from django.db.backends.ddl_references import Statement
from django.db.backends.sqlite3.schema import DatabaseSchemaEditor
from django.db.models.base import Model


class Index:
    model: Type[django.db.models.base.Model]
    suffix: str = ...
    max_name_length: int = ...
    fields: List[str] = ...
    fields_orders: List[Tuple[str, str]] = ...
    name: str = ...
    db_tablespace: Optional[str] = ...
    def __init__(
        self,
        *,
        fields: Any = ...,
        name: Optional[Any] = ...,
        db_tablespace: Optional[Any] = ...
    ) -> None: ...
    def check_name(self) -> List[str]: ...
    def create_sql(
        self,
        model: Type[Model],
        schema_editor: DatabaseSchemaEditor,
        using: str = ...,
    ) -> Statement: ...
    def remove_sql(
        self, model: Type[Model], schema_editor: DatabaseSchemaEditor
    ) -> str: ...
    def deconstruct(
        self
    ) -> Tuple[str, Tuple, Dict[str, Union[List[str], str]]]: ...
    def clone(self) -> Index: ...
    def set_name_with_model(self, model: Type[Model]) -> None: ...
    def __eq__(self, other: Index) -> bool: ...
