import {properties} from "../../../../environments/environment";
import {Measure} from "./resultLandingInfo";

export class DataproviderProvenance {
  provenance: Map<string, {"urlPrefix": string, "name": string}>;

  constructor() {
    this.provenance = new Map();
    this.provenance.set("opendoar____::", {"urlPrefix": properties.openDoarURL, "name": "OpenDOAR"});//, "idRegexPrefix": ""});
    this.provenance.set("re3data_____::", {"urlPrefix": properties.r3DataURL, "name": "re3data.org"});
    this.provenance.set("fairsharing_::", {"urlPrefix": properties.fairSharingURL, "name": "FAIRsharing"});
    this.provenance.set("eosc________::", {"urlPrefix": properties.eoscMarketplaceURL, "name": "EOSC Service Catalogue"});
  }
}

export class DataProviderInfo {
    relcanId;
    objIdentifier: string;
    record;
    title: { "name": string, "url": string };
    officialName: string;
    type: string;
    registry: boolean;
    compatibility: { "info": string, "name": string, "id": string };
    oaiPmhURL: string;
    openDoarId: string;
    r3DataId: string;
    provenance: Map<string, {"url": string[]}>;
    originalId: string;
    countries: string[];
    journal: {"journal": "", "issn": string, "lissn": string, "eissn": string};
    description: string;
    subjects: string[];
    jurisdiction: string;
    thematic: boolean;
    contentpolicy: string;
    identifiers: Map<string, string[]>;     //key is the classname

  fundedContent: string; // search query
  measure: Measure;

  //collected from datasource api
  // aggregationStatus: {"fundedContent": string, "indexRecords": string, "fulltexts": string, "lastUpdateDate": string};
  aggregationStatus: {"fulltexts": string};

    tabs: {"name": string, "content": string}[];
    tabs2: string[] =[];
    tabsInTypes = {
        "publicationsTab": new Set<string>(
                        [   "aggregator::datarepository",
                            "aggregator::pubsrepository::institutional",
                            "aggregator::pubsrepository::unknown",
                            "aggregator::pubsrepository::journals",
                            "crissystem",
                            "datarepository::unknown",
                            "infospace",
                            "pubsrepository::institutional",
                            "pubsrepository::journal",
                            "pubsrepository::unknown",
                            "scholarcomminfra",
                            "pubsrepository::thematic",
                            "pubscatalogue::unknown",
                            "orprepository"
                        ]),
        "datasetsTab": new Set<string>(
                        [   "aggregator::datarepository",
                            "aggregator::pubsrepository::institutional",
                            "aggregator::pubsrepository::unknown",
                            "aggregator::pubsrepository::journals",
                            "crissystem",
                            "datarepository::unknown",
                            "infospace",
                            "pubsrepository::institutional",
                            "pubsrepository::journal",
                            "pubsrepository::unknown",
                            "scholarcomminfra",
                            "pubsrepository::thematic",
                            "pubscatalogue::unknown",
                            "orprepository"
                        ]),
        "statisticsTab": new Set<string>(
                        [   "aggregator::datarepository",
                            "aggregator::pubsrepository::institutional",
                            "aggregator::pubsrepository::unknown",
                            "aggregator::pubsrepository::journals",
                            "crissystem",
                            "datarepository::unknown",
                            "pubsrepository::institutional",
                            "pubsrepository::journal",
                            "pubsrepository::unknown",
                            "pubsrepository::thematic",
                            "pubscatalogue::unknown",
                            "orprepository"
                        ]),
        // "organizationsTab": new Set<string>(
        //                 [   "entityregistry::projects",
        //                     "entityregistry::repositories"
        //                 ]),
        "projectsTab": new Set<string>(["entityregistry::projects"]),
        "datasourcesTab": new Set<string>(["entityregistry::repositories"]),
        "relatedDatasourcesTab": new Set<string>(
                        [   "aggregator::pubsrepository::unknown",
                            "aggregator::pubsrepository::journals",
                            "aggregator::pubsrepository::institutional",
                            "aggregator::datarepository"
                        ]),
        "softwareTab": new Set<string>(
                        [
                            "aggregator::datarepository",
                            "aggregator::pubsrepository::institutional",
                            "aggregator::pubsrepository::unknown",
                            "aggregator::pubsrepository::journals",
                            "crissystem",
                            "datarepository::unknown",
                            "infospace",
                            "pubsrepository::institutional",
                            "pubsrepository::journal",
                            "pubsrepository::unknown",
                            "scholarcomminfra",
                            "pubsrepository::thematic",
                            "pubscatalogue::unknown",
                            "softwarerepository",
                            "aggregator::softwarerepository",
                            "orprepository"
                        ]),
          "orpsTab": new Set<string>(
                          [
                            "aggregator::datarepository",
                            "aggregator::pubsrepository::institutional",
                            "aggregator::pubsrepository::unknown",
                            "aggregator::pubsrepository::journals",
                            "crissystem",
                            "datarepository::unknown",
                            "infospace",
                            "pubsrepository::institutional",
                            "pubsrepository::journal",
                            "pubsrepository::unknown",
                            "scholarcomminfra",
                            "pubsrepository::thematic",
                            "pubscatalogue::unknown",
                            "softwarerepository",
                            "aggregator::softwarerepository",
                            "orprepository"
                          ]),
        "metricsTab": new Set<string>(
                        [   "aggregator::datarepository",
                            "aggregator::pubsrepository::institutional",
                            "aggregator::pubsrepository::unknown",
                            "aggregator::pubsrepository::journals",
                            "crissystem",
                            "datarepository::unknown",
                            "infospace",
                            "pubsrepository::institutional",
                            "pubsrepository::journal",
                            "websource",
                            "pubsrepository::unknown",
                            "scholarcomminfra",
                            "pubsrepository::thematic",
                            "pubscatalogue::unknown",
                            "softwarerepository",
                            "aggregator::softwarerepository",
                            "orprepository"
                        ])

    };

    resultsBy: string;
    resultTypes = {
        "collectedFrom": new Set<string>(
                        [   "aggregator::datarepository",
                            "aggregator::pubsrepository::institutional",
                            "aggregator::pubsrepository::unknown",
                            "aggregator::pubsrepository::journals",
                            "entityregistry::projects",
                            "entityregistry::repositories",
                            "infospace",
                            "scholarcomminfra",
                            "pubscatalogue::unknown",
                            "aggregator::softwarerepository"
                        ]),
        "hostedBy": new Set<string>(
                        [   "crissystem",
                            "datarepository::unknown",
                            "pubsrepository::institutional",
                            "pubsrepository::journal",
                            "pubsrepository::unknown",
                            "pubsrepository::thematic",
                            "softwarerepository",
                            "orprepository"
                        ])
    };

    organizations: {"acronym": string, "name": string, "id": string}[] = [];
    //publications: any;
    //datasets: any;
    statistics: any;
    //projects: any;
    datasources: any;

    //relatedDatasources: Map<string, {"name": string, "countPublications": string, "countDatasets": string, "countSoftware": string, "countOrps": string}>;
  relatedDatasources: {"id": string, "name": string, "count": number}[] = [];
}
