from importlib import metadata
from typing import Literal

from .cookies import Cookies
from .headers import Headers
from .impit import (
    USE_CLIENT_DEFAULT,
    AsyncClient,
    Client,
    CloseError,
    ConnectError,
    ConnectTimeout,
    CookieConflict,
    DecodingError,
    HTTPError,
    HTTPStatusError,
    InvalidURL,
    LocalProtocolError,
    NetworkError,
    PoolTimeout,
    ProtocolError,
    ProxyError,
    ReadError,
    ReadTimeout,
    RemoteProtocolError,
    RequestError,
    RequestNotRead,
    Response,
    ResponseNotRead,
    StreamClosed,
    StreamConsumed,
    StreamError,
    TimeoutException,
    TooManyRedirects,
    TransportError,
    UnsupportedProtocol,
    WriteError,
    WriteTimeout,
    delete,
    get,
    head,
    options,
    patch,
    post,
    put,
    stream,
    trace,
)

__version__ = metadata.version('impit')

__all__ = [
    'USE_CLIENT_DEFAULT',
    'AsyncClient',
    'Browser',
    'Client',
    'CloseError',
    'ConnectError',
    'ConnectTimeout',
    'CookieConflict',
    'Cookies',
    'DecodingError',
    'HTTPError',
    'HTTPStatusError',
    'Headers',
    'InvalidURL',
    'LocalProtocolError',
    'NetworkError',
    'PoolTimeout',
    'ProtocolError',
    'ProxyError',
    'ReadError',
    'ReadTimeout',
    'RemoteProtocolError',
    'RequestError',
    'RequestNotRead',
    'Response',
    'ResponseNotRead',
    'StreamClosed',
    'StreamConsumed',
    'StreamError',
    'TimeoutException',
    'TooManyRedirects',
    'TransportError',
    'UnsupportedProtocol',
    'WriteError',
    'WriteTimeout',
    'delete',
    'get',
    'head',
    'options',
    'patch',
    'post',
    'put',
    'stream',
    'trace',
]


Browser = Literal[
    'chrome',
    'chrome100',
    'chrome101',
    'chrome104',
    'chrome107',
    'chrome110',
    'chrome116',
    'chrome124',
    'chrome125',
    'chrome131',
    'chrome136',
    'chrome142',
    'chrome151',
    'firefox',
    'firefox128',
    'firefox133',
    'firefox135',
    'firefox144',
    'okhttp',
    'okhttp3',
    'okhttp4',
    'okhttp5',
    'ios18',
]
