from typing import Iterator, Iterable

from django.forms import Form


class Workflow(Iterable['Stage']):
    def __init__(self, name: str, *stages: 'Stage') -> None:
        self.name = name
        if not stages:
            raise ValueError('Stages must be supplied')
        self.stages = stages

    def __iter__(self) -> Iterator['Stage']:
        yield from self.stages


class Stage:
    def __init__(self, name: str, form: Form) -> None:
        self.name = name
        self.form = form