from abc import ABC, abstractmethod
from typing import List

from src.domain.entities.merchant_offer import MerchantOffer


class MerchantOfferRepositoryInterface(ABC):
    """Contract for merchant offer data access."""

    @abstractmethod
    def get_by_merchant(self, merchant_id: int) -> List[MerchantOffer]: ...

    @abstractmethod
    def get_active_by_merchant(self, merchant_id: int) -> List[MerchantOffer]: ...

    @abstractmethod
    def delete_by_id(self, offer_id: int) -> bool: ...

    @abstractmethod
    def get_linked_offer_ids(self, product_id: int) -> List[int]: ...

    @abstractmethod
    def link_offers(self, product_id: int, offer_ids: List[int], user_id: int) -> bool: ...
