import json
from pathlib import Path

import utils.device
from .utils import get_dataset_desc_path
from .pano_dataset import PanoDataset
from .view_dataset import ViewDataset


class DatasetFactory(object):

    @staticmethod
    def load(path: Path, device=None, **kwargs):
        device = device or utils.device.default()
        path = get_dataset_desc_path(path)
        with open(path, 'r', encoding='utf-8') as file:
            data_desc: dict = json.loads(file.read())
        if data_desc.get('type') == 'pano':
            dataset_class = PanoDataset
        else:
            dataset_class = ViewDataset
        dataset = dataset_class(data_desc, path.absolute(), device=device, **kwargs)
        return dataset