# Copyright (C) 2023-2024 Cochise Ruhulessin
#
# All rights reserved. No warranty, explicit or implicit, provided. In
# no event shall the author(s) be liable for any claim or damages.
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
from typing import Any
from typing import Generic
from typing import TypeVar

from canonical.lib.protocols import IBuilder


T = TypeVar('T')


class BaseBuilder(IBuilder[T], Generic[T]):

    def __init__(self, cls: type[T], **kwargs: Any):
        self.model = cls
        self.setup(cls, **kwargs)

    def setup(self, model: type[T], **kwargs: Any) -> None:
        raise NotImplementedError

    async def build(self) -> T:
        raise NotImplementedError