# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.

from datetime import datetime, timedelta

from odoo import fields
from odoo.addons.event.tests.common import EventCase
from odoo.tests import Form


class TestWebsiteEventMeet(EventCase):

    @classmethod
    def setUpClass(cls):
        super(TestWebsiteEventMeet, cls).setUpClass()
        cls.event_0 = cls.env['event.event'].create({
            'name': 'TestEvent',
            'date_begin': fields.Datetime.to_string(datetime.today() + timedelta(days=1)),
            'date_end': fields.Datetime.to_string(datetime.today() + timedelta(days=15)),
            'date_tz': 'Europe/Brussels',
        })

    def test_meeting_room_create(self):
        """Test that the field of the mixin are automatically filled."""
        new_meeting_room_form = Form(self.env["event.meeting.room"])
        new_meeting_room_form.name = "Test name"
        new_meeting_room_form.event_id = self.event_0
        new_meeting_room_form.target_audience = "dev"
        new_meeting_room_form.room_max_capacity = "20"
        meeting_room = new_meeting_room_form.save()

        self.assertTrue(meeting_room.chat_room_id)
        self.assertEqual(meeting_room.chat_room_id.max_capacity, "20")

        # Try to create a meeting room without filling the related field
        # It must create the `chat.room` with the default value
        meeting_room = self.env["event.meeting.room"].create({
            "name": "Test 2",
            "event_id": self.event_0.id,
            "target_audience": "dev"
        })
        self.assertTrue(meeting_room.chat_room_id)
        self.assertTrue(meeting_room.chat_room_id.name)
        self.assertEqual(meeting_room.chat_room_id.max_capacity, "8")
        # Ensure default value for room_max_capacity in event.meeting.room
        self.assertEqual(meeting_room.room_max_capacity, "8")

    def test_meeting_room_copy(self):
        """Test the duplication of the meeting room."""
        meeting_room_1 = self.env["event.meeting.room"].create({
            "name": "Test meeting room",
            "event_id": self.event_0.id,
            "target_audience": "dev",
            "room_max_capacity": "20",
        })
        self.assertEqual(meeting_room_1.room_name, 'odoo-room-test-meeting-room')
        meeting_room_2 = meeting_room_1.copy()
        self.assertEqual(meeting_room_2.room_name, 'odoo-room-test-meeting-room-1')

        chat_room_1 = meeting_room_1.chat_room_id
        chat_room_2 = meeting_room_2.chat_room_id

        self.assertTrue(chat_room_1)
        self.assertTrue(chat_room_2)
        self.assertNotEqual(chat_room_1.id, chat_room_2.id, "Must create a new chat room")
        self.assertNotEqual(chat_room_1.name, chat_room_2.name, "Must generate a new chat room name")
        self.assertEqual(chat_room_1.max_capacity, "20", "Must set the max capacity on the chat room")
        self.assertEqual(chat_room_2.max_capacity, "20", "Must copy the max capacity")

        meeting_room_3 = meeting_room_1.copy()
        self.assertEqual(meeting_room_3.room_name, 'odoo-room-test-meeting-room-2')
        # Ensure room_max_capacity is copied to new meeting room
        self.assertEqual(meeting_room_3.room_max_capacity, "20")
        # Ensure max_capacity in linked chat room is same
        self.assertEqual(meeting_room_3.chat_room_id.max_capacity, "20")

    def test_meeting_room_unlink(self):
        """Test the duplication of the meeting room."""
        meeting_room = self.env["event.meeting.room"].create({
            "name": "Test meeting room",
            "event_id": self.event_0.id,
            "target_audience": "dev",
            "room_max_capacity": "20",
        })

        self.assertTrue(meeting_room.chat_room_id)
        chat_room_id = meeting_room.chat_room_id.id

        meeting_room.unlink()
        self.assertFalse(self.env["chat.room"].browse(chat_room_id).exists())
