# Stubs for logbook.ticketing (Python 3)
#
# NOTE: This dynamically typed stub was automatically generated by stubgen.

from logbook.base import LogRecord
from logbook.handlers import Handler, HashingHandlerMixin
from typing import Any, Optional

class Ticket:
    level_name: Any = ...
    db: Any = ...
    def __init__(self, db: Any, row: Any) -> None: ...
    def last_occurrence(self): ...
    def get_occurrences(self, order_by: str = ..., limit: int = ..., offset: int = ...): ...
    solved: bool = ...
    def solve(self) -> None: ...
    def delete(self) -> None: ...
    __hash__: Any = ...
    def __eq__(self, other: Any): ...
    def __ne__(self, other: Any): ...

class Occurrence(LogRecord):
    db: Any = ...
    time: Any = ...
    ticket_id: Any = ...
    occurrence_id: Any = ...
    def __init__(self, db: Any, row: Any) -> None: ...

class BackendBase:
    options: Any = ...
    def __init__(self, **options: Any) -> None: ...
    def setup_backend(self) -> None: ...
    def record_ticket(self, record: Any, data: Any, hash: Any, app_id: Any) -> None: ...
    def count_tickets(self) -> None: ...
    def get_tickets(self, order_by: str = ..., limit: int = ..., offset: int = ...) -> None: ...
    def solve_ticket(self, ticket_id: Any) -> None: ...
    def delete_ticket(self, ticket_id: Any) -> None: ...
    def get_ticket(self, ticket_id: Any) -> None: ...
    def get_occurrences(self, ticket: Any, order_by: str = ..., limit: int = ..., offset: int = ...) -> None: ...

class SQLAlchemyBackend(BackendBase):
    engine: Any = ...
    session: Any = ...
    table_prefix: Any = ...
    metadata: Any = ...
    def setup_backend(self) -> None: ...
    tickets: Any = ...
    occurrences: Any = ...
    def create_tables(self): ...
    def record_ticket(self, record: Any, data: Any, hash: Any, app_id: Any) -> None: ...
    def count_tickets(self): ...
    def get_tickets(self, order_by: str = ..., limit: int = ..., offset: int = ...): ...
    def solve_ticket(self, ticket_id: Any) -> None: ...
    def delete_ticket(self, ticket_id: Any) -> None: ...
    def get_ticket(self, ticket_id: Any): ...
    def get_occurrences(self, ticket: Any, order_by: str = ..., limit: int = ..., offset: int = ...): ...

class MongoDBBackend(BackendBase):
    class _FixedTicketClass(Ticket):
        @property
        def ticket_id(self): ...
    class _FixedOccurrenceClass(Occurrence):
        db: Any = ...
        time: Any = ...
        ticket_id: Any = ...
        occurrence_id: Any = ...
        def __init__(self, db: Any, row: Any) -> None: ...
    database: Any = ...
    def setup_backend(self) -> None: ...
    def record_ticket(self, record: Any, data: Any, hash: Any, app_id: Any) -> None: ...
    def count_tickets(self): ...
    def get_tickets(self, order_by: str = ..., limit: int = ..., offset: int = ...): ...
    def solve_ticket(self, ticket_id: Any) -> None: ...
    def delete_ticket(self, ticket_id: Any) -> None: ...
    def get_ticket(self, ticket_id: Any): ...
    def get_occurrences(self, ticket: Any, order_by: str = ..., limit: int = ..., offset: int = ...): ...

class TicketingBaseHandler(Handler, HashingHandlerMixin):
    hash_salt: Any = ...
    def __init__(self, hash_salt: Any, level: Any = ..., filter: Optional[Any] = ..., bubble: bool = ...) -> None: ...
    def hash_record_raw(self, record: Any): ...

class TicketingHandler(TicketingBaseHandler):
    default_backend: Any = ...
    app_id: Any = ...
    def __init__(self, uri: Any, app_id: str = ..., level: Any = ..., filter: Optional[Any] = ..., bubble: bool = ..., hash_salt: Optional[Any] = ..., backend: Optional[Any] = ..., **db_options: Any) -> None: ...
    db: Any = ...
    def set_backend(self, cls: Any, **options: Any) -> None: ...
    def process_record(self, record: Any, hash: Any): ...
    def record_ticket(self, record: Any, data: Any, hash: Any) -> None: ...
    def emit(self, record: Any) -> None: ...
