from torch.utils.data import ConcatDataset
from musicfm.data_loaders.mertlong import MERTDataset
from musicfm.data_loaders.msd import MSDDataset
from musicfm.data_loaders.fma import FMADataset
from musicfm.data_loaders.genius import GeniusDataset
from musicfm.data_loaders.tency import TencyDataset


def get_dataset(dataset, split, num_samples=-1, input_length_s=29.0):
    if dataset == "mertlong":
        return MERTDataset(
            split=split, num_samples=num_samples, input_length_s=input_length_s
        )

    elif dataset == "msd":
        return MSDDataset(
            split=split, num_samples=num_samples, input_length_s=input_length_s
        )

    elif dataset == "fma":
        return FMADataset(
            split=split, num_samples=num_samples, input_length_s=input_length_s
        )

    elif dataset == "genius":
        return GeniusDataset(
            split=split, num_samples=num_samples, input_length_s=input_length_s
        )

    elif dataset == "concat":
        datasets = [
            MERTDataset(
                split=split, num_samples=num_samples, input_length_s=input_length_s
            ),
            GeniusDataset(
                split=split, num_samples=num_samples, input_length_s=input_length_s
            ),
            MSDDataset(
                split=split, num_samples=num_samples, input_length_s=input_length_s
            ),
            TencyDataset(
                split=split, num_samples=num_samples, input_length_s=input_length_s
            ),
        ]
        return ConcatDataset(datasets)

    else:
        print("%s dataset is not supported yet" % dataset)
