# -*- coding: utf-8 -*-
from __future__ import absolute_import, print_function, unicode_literals

import sys

from cms.api import create_page, create_title
from cms.models import Page
from cms.utils import get_language_list
from django.utils.translation import override

from djangocms_blog.cms_appconfig import BlogConfig

from .base import BaseTest

try:
    from django.test import override_settings
except ImportError:
    from django.test.utils import override_settings


@override_settings(BLOG_AUTO_SETUP=True)
class SetupTest(BaseTest):

    @classmethod
    def setUpClass(cls):
        # Skipping initialization to start with clean database
        super(BaseTest, cls).setUpClass()

    def setUp(self):
        super(SetupTest, self).setUp()
        from cms.apphook_pool import apphook_pool

        delete = [
            'djangocms_blog',
            'djangocms_blog.cms_app',
            'djangocms_blog.cms_apps',
        ]
        for module in delete:
            if module in sys.modules:
                del sys.modules[module]
        BlogConfig.cmsapp = None
        apphook_pool.clear()

    def test_setup_from_url(self):

        # Tests starts with no page and no config
        self.assertFalse(Page.objects.exists())
        self.assertFalse(BlogConfig.objects.exists())

        # importing cms_app triggers the auto setup
        from djangocms_blog import cms_apps  # NOQA

        # Home and blog, published and draft
        self.assertEqual(Page.objects.count(), 4)
        self.assertEqual(BlogConfig.objects.count(), 1)

    def test_setup_filled(self):

        # Tests starts with no page and no config
        self.assertFalse(Page.objects.exists())
        self.assertFalse(BlogConfig.objects.exists())

        langs = get_language_list()
        home = None
        for lang in langs:
            with override(lang):
                if not home:
                    home = create_page(
                        'a new home', language=lang,
                        template='blog.html', in_navigation=True, published=True
                    )
                else:
                    create_title(
                        language=lang, title='a new home', page=home
                    )
                    home.publish(lang)

        # importing cms_app triggers the auto setup
        from djangocms_blog import cms_apps  # NOQA

        # Home and blog, published and draft
        self.assertEqual(Page.objects.count(), 4)
        self.assertEqual(BlogConfig.objects.count(), 1)

        home = Page.objects.get_home()
        for lang in langs:
            self.assertEqual(home.get_title(lang), 'a new home')