from typing import overload
import datetime
import typing

import QuantConnect
import QuantConnect.DownloaderDataProvider.Launcher
import System
import System.Collections.Generic


class Program(System.Object):
    """This class has no documentation."""

    @staticmethod
    def calculate_eta(utc_now: typing.Union[datetime.datetime, datetime.date], start_utc_time: typing.Union[datetime.datetime, datetime.date], total_data_in_seconds: float, current_progress_second: float) -> datetime.timedelta:
        """
        Calculates the Estimated Time of Arrival (ETA) based on the current progress of a download.
        
        :param utc_now: The current UTC DateTime.
        :param start_utc_time: The DateTime when the download started.
        :returns: A TimeSpan representing the Estimated Time of Arrival (ETA).
        """
        ...

    @staticmethod
    def initialize_configurations() -> None:
        """
        Initializes various configurations for the application.
        This method sets up logging, data providers, map file providers, and factor file providers.
        """
        ...

    @staticmethod
    def main(args: typing.List[str]) -> None:
        """
        The main entry point for the application.
        
        :param args: Command-line arguments passed to the application.
        """
        ...


class DataDownloadConfig:
    """Represents the configuration for data download."""

    @property
    def tick_type(self) -> int:
        """
        Type of tick data to download.
        
        This property contains the int value of a member of the QuantConnect.TickType enum.
        """
        ...

    @property
    def security_type(self) -> int:
        """
        Type of security for which data is to be downloaded.
        
        This property contains the int value of a member of the QuantConnect.SecurityType enum.
        """
        ...

    @property
    def resolution(self) -> int:
        """
        Resolution of the downloaded data.
        
        This property contains the int value of a member of the QuantConnect.Resolution enum.
        """
        ...

    @property
    def start_date(self) -> datetime.datetime:
        """Start date for the data download."""
        ...

    @property
    def end_date(self) -> datetime.datetime:
        """End date for the data download."""
        ...

    @property
    def market_name(self) -> str:
        """Market name for which the data is to be downloaded."""
        ...

    @property
    def symbols(self) -> System.Collections.Generic.List[QuantConnect.Symbol]:
        """List of symbols for which data is to be downloaded."""
        ...

    def __init__(self) -> None:
        """Initializes a new instance of the DataDownloadConfig struct."""
        ...

    def to_string(self) -> str:
        """
        Returns a string representation of the DataDownloadConfig struct.
        
        :returns: A string representation of the DataDownloadConfig struct.
        """
        ...


class DownloaderDataProviderArgumentParser(System.Object):
    """This class has no documentation."""

    @staticmethod
    def parse_arguments(args: typing.List[str]) -> System.Collections.Generic.Dictionary[str, System.Object]:
        """
        Parses the command-line arguments and returns a dictionary containing parsed values.
        
        :param args: An array of command-line arguments.
        :returns: A dictionary containing parsed values from the command-line arguments.
        """
        ...


