import json
import logging

import requests
from django.conf import settings
from django.utils.translation import gettext_lazy
from wagtail.admin.edit_handlers import (
    CommentPanel,
    FieldPanel,
    HelpPanel,
    MultiFieldPanel,
)
from wagtail.core.models import Page
from wagtail.images.edit_handlers import ImageChooserPanel

from tuning import admin_help

logger = logging.getLogger()


def get_subpage_url(page, dest_page_type):
    try:
        return page.get_descendants().type(dest_page_type).live().first().get_url()
    except (Page.DoesNotExist, AttributeError):
        return "#"


def make_promote_panels(
    help_content=None, *, seo_title=True, search_description=True, search_image=True
):
    if help_content is None:
        help_content = admin_help.build(
            admin_help.NO_SEO_TITLE, admin_help.NO_SEARCH_IMAGE
        )

    panels = [FieldPanel("slug")]
    if seo_title:
        panels.append(FieldPanel("seo_title"))
    if search_description:
        panels.append(FieldPanel("search_description"))
    if search_image:
        panels.append(ImageChooserPanel("search_image"))
    panels.append(HelpPanel(help_content))
    panels.append(CommentPanel())

    return [MultiFieldPanel(panels, gettext_lazy("Common page configuration"))]


def subscribe_to_newsletter(email, news_id, source):
    payload = {
        "email": email,
        "news_id": news_id,
        "source": source,
        "verify_email": 1,
    }
    response = requests.post(
        settings.NALODENI_API_NEWS_SUBSCRIBE_URL,
        data=json.dumps(payload),
        auth=tuple(settings.NALODENI_API_CREDENTIALS.split(":")),
    )
    if response.status_code != 200:
        logger.error(
            "Failed to subscribe!",
            extra={"payload": payload, "response": response.text},
        )