import {UserListFactory} from '../../factories/users_list'
import {TaskFactory} from '../../factories/task'
import {UserFactory} from '../../factories/user'
import {ListFactory} from '../../factories/list'
import {prepareLists} from './prepareLists'

import '../../support/authenticateUser'

describe('List View List', () => {
	prepareLists()

	it('Should be an empty list', () => {
		cy.visit('/lists/1')
		cy.url()
			.should('contain', '/lists/1/list')
		cy.get('.list-title h1')
			.should('contain', 'First List')
		cy.get('.list-title .dropdown')
			.should('exist')
		cy.get('p')
			.contains('This list is currently empty.')
			.should('exist')
	})
	
	it('Should create a new task', () => {
		const newTaskTitle = 'New task'
		
		cy.visit('/lists/1')
		cy.get('.task-add textarea')
			.type(newTaskTitle+'{enter}')
		cy.get('.tasks')
			.should('contain.text', newTaskTitle)
	})

	it('Should navigate to the task when the title is clicked', () => {
		const tasks = TaskFactory.create(5, {
			id: '{increment}',
			list_id: 1,
		})
		cy.visit('/lists/1/list')

		cy.get('.tasks .task .tasktext')
			.contains(tasks[0].title)
			.first()
			.click()

		cy.url()
			.should('contain', `/tasks/${tasks[0].id}`)
	})

	it('Should not see any elements for a list which is shared read only', () => {
		UserFactory.create(2)
		UserListFactory.create(1, {
			list_id: 2,
			user_id: 1,
			right: 0,
		})
		const lists = ListFactory.create(2, {
			owner_id: '{increment}',
			namespace_id: '{increment}',
		})
		cy.visit(`/lists/${lists[1].id}/`)

		cy.get('.list-title a.icon')
			.should('not.exist')
		cy.get('input.input[placeholder="Add a new task..."')
			.should('not.exist')
	})

	it('Should only show the color of a list in the navigation and not in the list view', () => {
		const lists = ListFactory.create(1, {
			hex_color: '00db60',
		})
		TaskFactory.create(10, {
			list_id: lists[0].id,
		})
		cy.visit(`/lists/${lists[0].id}/`)

		cy.get('.menu-list li .list-menu-link .color-bubble')
			.should('have.css', 'background-color', 'rgb(0, 219, 96)')
		cy.get('.tasks-container .tasks .color-bubble')
			.should('not.exist')
	})

	it('Should paginate for > 50 tasks', () => {
		const tasks = TaskFactory.create(100, {
			id: '{increment}',
			title: i => `task${i}`,
			list_id: 1,
		})
		cy.visit('/lists/1/list')

		cy.get('.tasks-container .tasks')
			.should('contain', tasks[99].title)

		cy.get('.card-content .pagination .pagination-link')
			.contains('2')
			.click()

		cy.url()
			.should('contain', '?page=2')
		cy.get('.tasks-container .tasks')
			.should('contain', tasks[1].title)
		cy.get('.tasks-container .tasks')
			.should('not.contain', tasks[99].title)
	})
})