#
# Aura Engine API (https://gitlab.servus.at/aura/engine-api)
#
# Copyright (C) 2020 - The Aura Engine Team.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.


from __future__ import absolute_import

from flask import json

from aura_engine_api.rest.models.clock_info import ClockInfo  # noqa: E501

from . import BaseTestCase


class TestInternalController(BaseTestCase):
    """InternalController integration test stubs"""

    def test_add_playlog(self):
        """Test case for add_playlog

        Adds an entry to the playlog
        """
        body = {"trackStart": "2018-08-12 16:41+01:00"}
        response = self.client.open(
            "/api/v1/playlog",
            method="POST",
            data=json.dumps(body),
            content_type="application/json",
        )
        self.assert204(response, "Response body is : " + response.data.decode("utf-8"))

    def test_clock_info(self):
        """Test case for clock_info

        Get all information to display the studio clock
        """
        response = self.client.open("/api/v1/clock", method="GET")
        self.assert200(response, "Response body is : " + response.data.decode("utf-8"))

    def test_get_active_source(self):
        """Test case for get_active_source

        Get active play-out source (engine1, engine2)
        """
        response = self.client.open("/api/v1/source/active", method="GET")
        # TEMP FIX: we need some data to succeed with assert200
        self.assert204(response, "Response body is : " + response.data.decode("utf-8"))

    def test_get_report(self):
        """Test case for get_report

        Report for one month
        """
        response = self.client.open(
            "/api/v1/playlog/report/{year_month}".format(year_month="2020_02"), method="GET"
        )
        self.assert200(response, "Response body is : " + response.data.decode("utf-8"))

    def test_get_source_health(self):
        """Test case for get_source_health

        Get most recent health info
        """
        response = self.client.open(
            "/api/v1/source/health/{number}".format(number=2), method="GET"
        )
        self.assert200(response, "Response body is : " + response.data.decode("utf-8"))

    def test_list_playlog(self):
        """Test case for list_playlog

        List tracks in the play-log since the given timestamp
        """
        query_string = [
            ("fromDate", "2013-10-20T19:20:30+01:00"),
            ("toDate", "2013-10-20T19:20:30+01:00"),
            ("page", 56),
            ("limit", 200),
            ("skipSynced", True),
        ]
        response = self.client.open("/api/v1/playlog", method="GET", query_string=query_string)
        self.assert200(response, "Response body is : " + response.data.decode("utf-8"))

    def test_log_source_health(self):
        """Test case for log_source_health

        Log health info
        """
        body = {
            "details": "",
            "isHealthy": True,
            "logTime": "2014-11-21T17:16:23+01:00",
        }
        response = self.client.open(
            "api/v1/source/health/{number}".format(number=2),
            method="POST",
            data=json.dumps(body),
            content_type="application/json",
        )
        self.assert204(response, "Response body is : " + response.data.decode("utf-8"))

    def test_set_active_source(self):
        """Test case for set_active_source

        Set active play-out source (engine1, engine2)
        """
        response = self.client.open(
            "/api/v1/source/active/{number}".format(number=2), method="PUT"
        )
        self.assert204(response, "Response body is : " + response.data.decode("utf-8"))

    def test_set_clock_info(self):
        """Test case for set_clock_info

        Set current studio clock information such as timeslot info and track-list for engine 1 or 2
        within the Engine API database.
        """
        body = ClockInfo(engine_source=1)
        response = self.client.open(
            "/api/v1/clock", method="PUT", data=json.dumps(body), content_type="application/json"
        )
        self.assert204(response, "Response body is : " + response.data.decode("utf-8"))


if __name__ == "__main__":
    import unittest

    unittest.main()