import pytest

from label_studio.tests.sdk.common import LABEL_CONFIG_AND_TASKS

pytestmark = pytest.mark.django_db
from label_studio_sdk.client import LabelStudio


def test_start_and_get_project(django_live_url, business_client):
    ls = LabelStudio(base_url=django_live_url, api_key=business_client.api_key)
    p = ls.projects.create(title='New Project', label_config=LABEL_CONFIG_AND_TASKS['label_config'])

    project = ls.projects.get(id=p.id)
    assert project
    assert project.title == 'New Project'

    ls.projects.update(id=project.id, title='Updated Project')
    project = ls.projects.get(id=p.id)
    assert project.title == 'Updated Project'


def test_delete_project(django_live_url, business_client):
    ls = LabelStudio(base_url=django_live_url, api_key=business_client.api_key)
    p = ls.projects.create(title='New Project', label_config=LABEL_CONFIG_AND_TASKS['label_config'])

    project = ls.projects.get(id=p.id)
    ls.projects.delete(id=project.id)

    any_project_found = False
    for project in ls.projects.list():
        any_project_found = True

    assert not any_project_found


def test_list_projects_with_params(django_live_url, business_client):

    ls = LabelStudio(base_url=django_live_url, api_key=business_client.api_key)
    ls.projects.create(title='Project 1', label_config=LABEL_CONFIG_AND_TASKS['label_config'])
    ls.projects.create(title='Project 2', label_config=LABEL_CONFIG_AND_TASKS['label_config'])

    projects = list(ls.projects.list())
    assert len(projects) == 2
    assert projects[0].title == 'Project 2'
    assert projects[1].title == 'Project 1'

    projects = list(ls.projects.list(filter='pinned_only'))
    assert not projects

    projects = list(ls.projects.list(include='id,title,pinned_at,created_at,created_by'))
    assert projects[0].pinned_at is None
    assert projects[0].created_at is not None
    assert projects[0].created_by.email == business_client.user.email
