import trackingmore
import requests

from .logging import Logger

from typing import Dict, List, Tuple, Generator, Optional

class TrackingMore:
    api_key: str
    logger: Logger
    client: trackingmore.TrackingMore

    api_code: str = "trackingmore"
    parcel_api: str = "trackingmore"

    operator: str = "TrackingMore ([https://www.trackingmore.com](https://www.trackingmore.com))"

    def __init__(self, api_key: str, logger: Optional[Logger] = None):
        self.api_key: str = api_key
        self.logger: Logger = logger or Logger()
        self.client = trackingmore.TrackingMore(self.api_key)

    def lookup_parcel(self, query: str, carrier: Optional[str] = None, user: Optional[str] = None) -> Tuple[str, int]:
        self.logger.log(f"Querying TrackingMore for {query}")

        if query == "carriers":
            response = "\n".join(f"* {carrier['courier_name']} - {carrier['courier_code']}" for carrier in self.client.get_carriers())
            return response, 1

        response = self.client.track_shipment(query)

        return response, 1