import connexion
from swagger_server.models.scholix_links_model import ScholixLinksModel
from datetime import date, datetime
from typing import List, Dict
from six import iteritems
from ..util import deserialize_date, deserialize_datetime
from swagger_server.controllers.scholix import create_response
from swagger_server.eu.dnetlib.v2.DLIESConnector import dli_index


req_fields = ['sourcePid', 'targetPid', 'sourcePublisher', 'targetPublisher', 'linkProvider']

def get_links(linkProvider=None, targetPid=None, targetPublisher=None, sourcePid=None, harvestedAfter=None, sourcePublisher=None, sourcePidType=None, page=None, targetPidType=None):
    """
    get_links
    Return a List of scholix Links, this method &lt;b style&#x3D;\&quot;color:#FF0000\&quot; &gt;require one of the following parameters&lt;/b&gt; (&lt;b&gt;sourcePid, targetPid, sourcePublisher, targetPublisher, linkProvider&lt;/b&gt;) all parameters can be combined
    :param linkProvider: Filter Scholix relationships collected from a LinkProvider
    :type linkProvider: str
    :param targetPid: Filter Scholix relationships having a target pid
    :type targetPid: str
    :param targetPublisher: Filter Scholix relationships having a target published in a Publisher named targetPublisher
    :type targetPublisher: str
    :param sourcePid: Filter Scholix relationships having a source pid
    :type sourcePid: str
    :param harvestedAfter: filter scholix Links having collected after this date
    :type harvestedAfter: str
    :param sourcePublisher: Filter Scholix relationships having a source published in a Publisher named sourcePublisher
    :type sourcePublisher: str
    :param sourcePidType: Filter Scholix relationships having a source pid type
    :type sourcePidType: str
    :param page: select page of result
    :type page: int
    :param targetPidType: Filter Scholix relationships having a target pid Type
    :type targetPidType: str

    :rtype: List[ScholixLinksModel]
    """
    if not (sourcePid or targetPid or sourcePublisher or targetPublisher or linkProvider):
        return 'The mdethod require one of the following parameter sourcePid, targetPid, sourcePublisher, targetPublisher, linkProvider', 400, {'x-error': 'wrong argument'}

    m_page = 0
    if page:
        m_page= page

    return create_response(dli_index.links(provider=linkProvider, s_pid=sourcePid, t_pid=targetPid, s_publisher=sourcePublisher,
                                           t_publisher=targetPublisher, s_pid_type=sourcePidType,
                                           t_pid_type=targetPidType, page=m_page), m_page)
