import json
import pytest
from copy import copy

from fatcat_openapi_client import *
from fatcat_openapi_client.rest import ApiException
from fixtures import *


def test_creators(api):
    eg = quick_eg(api)

    # all the fields!
    c1 = CreatorEntity(
        display_name="Emma Smith",
        given_name="emma",
        surname="smith",
        orcid="0000-0002-1825-0097",
        wikidata_qid="Q9542248",
        extra=dict(a=1, b=5),
        edit_extra=dict(test_key="creators rule"),
    )

    c1edit = api.create_creator(eg.editgroup_id, c1)
    assert c1edit.extra == c1.edit_extra
    api.accept_editgroup(eg.editgroup_id)
    c2 = api.get_creator(c1edit.ident)

    # check that fields match
    assert c1.display_name == c2.display_name
    assert c1.given_name == c2.given_name
    assert c1.surname == c2.surname
    assert c1.orcid == c2.orcid
    assert c1.wikidata_qid == c2.wikidata_qid
    assert c1.extra == c2.extra

    # get revision
    c2_rev = api.get_creator_revision(c1edit.revision)
    assert c1edit.revision == c2_rev.revision
    assert c2.revision == c2_rev.revision
    assert c2.display_name == c2_rev.display_name

    # get redirects (none)
    assert api.get_creator_redirects(c2.ident) == []

    # also try a batch insert
    c3_eg = api.create_creator_auto_batch(CreatorAutoBatch(Editgroup(), [c1]))
    c3edit = c3_eg.edits.creators[0]
    assert c3edit.extra == c1.edit_extra
    c3 = api.get_creator(c3edit.ident)

    assert c1.display_name == c3.display_name
    assert c1.extra == c3.extra
    
    # delete
    eg = quick_eg(api)
    api.delete_creator(eg.editgroup_id, c2.ident)
    api.delete_creator(eg.editgroup_id, c3.ident)
    api.accept_editgroup(eg.editgroup_id)
    c2 = api.get_creator(c2.ident)
    assert c2.state == "deleted"

# TODO: test expansion of new creator/release pair (release get)?

def test_creators_examples(api):
    # ident: aaaaaaaaaaaaaircaaaaaaaaam

    c1 = api.lookup_creator(orcid='0000-0003-3118-6859')
    assert c1.ident == "aaaaaaaaaaaaaircaaaaaaaaam"