"""TickerScope API client library."""

from tickerscope._auth import async_authenticate, is_token_expired
from tickerscope._client import (
    AsyncTickerScopeClient,
    BaseTickerScopeClient,
    TickerScopeClient,
)
from tickerscope._exceptions import (
    APIError,
    AuthenticationError,
    CookieExtractionError,
    HTTPError,
    TickerScopeError,
    SymbolNotFoundError,
    TokenExpiredError,
)
from tickerscope._serialization import SerializableDataclass
from tickerscope._models import (
    PREDEFINED_REPORTS,
    AdhocScreenResult,
    AlertCriteria,
    AlertInstrument,
    AlertSubscription,
    AlertSubscriptionList,
    AlertTerm,
    AscendingBasePattern,
    BasicOwnership,
    ChartData,
    ChartMarkup,
    ChartMarkupList,
    CoachTreeData,
    Company,
    CorporateActions,
    CupPattern,
    DataPoint,
    DeliveryPreference,
    Dividend,
    DoubleBottomPattern,
    EstimatePeriod,
    ExchangeHoliday,
    ExchangeInfo,
    Financials,
    FundamentalData,
    Fundamentals,
    HistoricalPriceStatistic,
    Industry,
    IndustryGroupSnapshot,
    IpoBasePattern,
    Layout,
    LayoutColumn,
    NavTreeFolder,
    NavTreeLeaf,
    NavTreeNode,
    OwnershipData,
    Panel,
    Pattern,
    PricePercentChanges,
    Pricing,
    QuarterlyEstimate,
    QuarterlyFinancials,
    QuarterlyFundOwnership,
    QuarterlyProfitMargin,
    QuarterlyReportedPeriod,
    Quote,
    Ratings,
    ReportInfo,
    ReportedPeriod,
    RSRatingHistory,
    RSRatingSnapshot,
    Screen,
    ScreenResult,
    ScreenSource,
    StockAnalysis,
    StockData,
    TightArea,
    TimeSeries,
    TriggeredAlert,
    TriggeredAlertList,
    TriggeredAlertTerm,
    VolumeMovingAverage,
    WatchlistDetail,
    WatchlistEntry,
    WatchlistSymbol,
    WatchlistSummary,
)
from tickerscope._models import (
    Catalog,
    CatalogEntry,
    CatalogKind,
    CatalogResult,
)

__all__ = [
    # Clients
    "BaseTickerScopeClient",
    "TickerScopeClient",
    "AsyncTickerScopeClient",
    # Auth helpers
    "async_authenticate",
    "is_token_expired",
    # Stock models
    "StockData",
    "StockAnalysis",
    "Ratings",
    "Company",
    "Pricing",
    "PricePercentChanges",
    "Financials",
    "CorporateActions",
    "Dividend",
    "Pattern",
    "CupPattern",
    "DoubleBottomPattern",
    "AscendingBasePattern",
    "IpoBasePattern",
    "TightArea",
    "Industry",
    "IndustryGroupSnapshot",
    "BasicOwnership",
    "Fundamentals",
    # Chart data models
    "ChartData",
    "DataPoint",
    "Quote",
    "TimeSeries",
    "ExchangeHoliday",
    "ExchangeInfo",
    # Fundamental data models
    "FundamentalData",
    "HistoricalPriceStatistic",
    "ReportedPeriod",
    "EstimatePeriod",
    # Quarterly financial models
    "QuarterlyReportedPeriod",
    "QuarterlyEstimate",
    "QuarterlyProfitMargin",
    "QuarterlyFinancials",
    # Alert models
    "AlertInstrument",
    "AlertTerm",
    "AlertCriteria",
    "DeliveryPreference",
    "AlertSubscription",
    "AlertSubscriptionList",
    "TriggeredAlertTerm",
    "TriggeredAlert",
    "TriggeredAlertList",
    # Layout models
    "Layout",
    "LayoutColumn",
    # Nav tree models
    "NavTreeNode",
    "NavTreeFolder",
    "NavTreeLeaf",
    # Report models
    "PREDEFINED_REPORTS",
    "ReportInfo",
    # Coach tree models
    "CoachTreeData",
    # Panel models
    "Panel",
    # Chart markup models
    "ChartMarkup",
    "ChartMarkupList",
    # Watchlist models
    "WatchlistEntry",
    "WatchlistSymbol",
    "WatchlistDetail",
    "OwnershipData",
    "QuarterlyFundOwnership",
    "VolumeMovingAverage",
    "WatchlistSummary",
    # RS rating models
    "RSRatingSnapshot",
    "RSRatingHistory",
    # Screen models
    "Screen",
    "ScreenResult",
    "AdhocScreenResult",
    "ScreenSource",
    # Serialization base
    "SerializableDataclass",
    # Catalog models
    "CatalogKind",
    "CatalogEntry",
    "Catalog",
    "CatalogResult",
    # Exceptions
    "TickerScopeError",
    "AuthenticationError",
    "CookieExtractionError",
    "TokenExpiredError",
    "APIError",
    "SymbolNotFoundError",
    "HTTPError",
]
