#  SPDX-License-Identifier: MPL-2.0
#    Copyright (c) 2022 Philipp Le <philipp@philipple.de>.
#  This Source Code Form is subject to the terms of the Mozilla Public
#  License, v. 2.0. If a copy of the MPL was not distributed with this
#  file, You can obtain one at https://mozilla.org/MPL/2.0/.

from typing import List, Type
from . import base

from .ch02_phasor import Ch02PhasorWindow
from .ch02_fourier import Ch02FourierWindow
from .ch03_ergodic import Ch03ErgodicWindow
from .ch03_cross import Ch03CrossCorrelationWindow
from .ch03_psd import Ch03PsdWindow
from .ch04_sampling import Ch04SamplingWindow


def get_windows() -> List[Type[base.Window]]:
    return [
        Ch02PhasorWindow,
        Ch02FourierWindow,
        Ch03ErgodicWindow,
        Ch03CrossCorrelationWindow,
        Ch03PsdWindow,
        Ch04SamplingWindow,
    ]


def get_groups() -> List[Type[base.Group]]:
    return base.get_groups(get_windows())


def get_win_of_group(grp: Type[base.Group]) -> List[Type[base.Window]]:
    return base.get_win_of_group(get_windows(), grp)
