from abc import ABCMeta, abstractmethod

from production.model import Course
from typing import List, Tuple, Dict


class ProductRepository(object):
    __metaclass__ = ABCMeta

    @abstractmethod
    def get_part_codes_of_jit_lines(self, jit_lines):
        # type: (List[str]) -> List[int]
        raise NotImplementedError()

    @abstractmethod
    def get_all_part_code_jit_lines(
        self,   # type: ProductRepository
    ):
        # type: (...) -> Dict[int, str]

        raise NotImplementedError()

    def get_prep_times(self):
        # type: () -> Dict[int, int]
        raise NotImplementedError()

    def get_courses_products(self):
        # type: () -> Dict[str, int]
        raise NotImplementedError()

    def get_not_show_on_kitchen(self):
        # type: () -> List[int]
        raise NotImplementedError()

    def get_no_jit_part_codes(self):
        # type: () -> List[int]
        raise NotImplementedError()

    def get_cfh_items(self):
        # type: () -> List[int]
        raise NotImplementedError()

    def get_all_courses(self):
        # type: () -> List[Course]

        raise NotImplementedError()
