from abc import ABC, abstractmethod
import pandas as pd

class DataFetcher(ABC):
    def __init__(self, api_key: str):
        self.api_key = api_key

    @abstractmethod
    def get_income_statement(self, symbol: str) -> pd.DataFrame:
        pass

    @abstractmethod
    def get_balance_sheet(self, symbol: str) -> pd.DataFrame:
        pass

    @abstractmethod
    def get_cash_flow(self, symbol: str) -> pd.DataFrame:
        pass

    @abstractmethod
    def get_market_metrics(self, symbol: str) -> dict:
        """
        Returns a dictionary containing:
        - price
        - market_cap (value)
        - pe
        - pb
        - total_share_holders (int)
        - employee_count (int)
        """
        pass
