from abc import ABC, abstractmethod


class BasePlatform(ABC):
    @abstractmethod
    async def publish(self, video_url: str, caption: str, access_token: str, **kwargs) -> dict:
        pass

    @abstractmethod
    async def get_metrics(self, post_id: str, access_token: str) -> dict:
        pass

    @abstractmethod
    def get_oauth_url(self, redirect_uri: str) -> str:
        pass

    @abstractmethod
    async def handle_oauth_callback(self, code: str, redirect_uri: str) -> dict:
        pass
