import hashlib
import urllib2

from flask import json


class DLIRelation(object):
    def __init__(self, entity):

        m = hashlib.md5()
        m.update("%s::%s" % (entity['targetPID']['id'], entity['targetPID']['type']))
        self.relatedDnetId = m.hexdigest()

        self.targetPID = entity['targetPID']['id']
        self.targetPIDType = entity['targetPID']['type']
        if "targetType" in entity:
            self.relatedEntityType = entity['targetType']
        if "relationSemantics" in entity:
            self.typeOfRelation = entity['relationSemantics']
        if "targetTitle" in entity:
            self.related_title = entity['targetTitle']
        self.authors = []
        if 'authors' in entity:
            for author in entity['authors']:
                self.authors.append(author)
        self.relation_provenance = []
        if 'relationProvenance' in entity:
            for provenance in entity['relationProvenance']:
                item = {'name': provenance['datasource'], 'completionStatus': provenance['completionStatus'],
                        'provisionMode': provenance['provisionMode'],
                        'collectionDate': provenance['collectionDate']}
                self.relation_provenance.append(item)


class DLIObject(object):
    def __init__(self, id, basepath):
        self.identifier = ""
        self.pid = ""
        self.pid_type = ""
        self.resolved_url = ""
        self.completionStatus = ""
        self.provenance_record = []
        self.objectType = "unknown"
        self.title = ""
        self.date = ""
        self.authors = []
        self.relations = []
        try:
            request = urllib2.urlopen("%s/mvc/ui/dli/dli_objectStore/retrieveObject.do?id=%s" % (basepath, id))
            data = json.loads(request.read())
            self.pid = data['pid']
            self.identifier = id
            self.pid_type = data['pidType']

            if 'resolvedTypes' in data:
                if self.pid_type in data['resolvedTypes']:
                    self.resolved_url = data['resolvedTypes'][self.pid_type] % self.pid

            if "titles" in data:
                if len(data['titles']) > 0:
                    self.title = data['titles'][0].replace('["','').replace('"]','')
            self.authors = data['authors']
            if 'type' in data:
                self.objectType = data['type']
            self.completionStatus = data['completionStatus']
            if 'date' in data:
                self.date = data['date']
            if 'datasourceProvenance' in data:
                for provenance in data['datasourceProvenance']:
                    item = {'name': provenance['datasource'], 'completionStatus': provenance['completionStatus'],
                            'provisionMode': provenance['provisionMode'],
                            'collectionDate': provenance['collectionDate']}

                    if 'datasourceId' in provenance:
                        item['datasourceId'] = provenance['datasourceId']

                    if 'publisher' in provenance:
                        item['publisher'] =provenance['publisher']
                    if 'publisherId' in provenance:
                        item['publisherId'] =provenance['publisherId']

                    self.provenance_record.append(item)
            if 'relations' in data:
                for rels in data['relations']:
                    self.relations.append(DLIRelation(rels))
        except Exception as e:
            print "error on request object"
            print e
