from django.urls import reverse

from .models import Agreement
from .utils import get_parsed_agreement_text, get_required_user_agreement


# fixme: rename this context processor to more suitable name
def legal_links(request):
    agreements = Agreement.objects.get_agreements()

    legal_context = {
        'TERMS_OF_SERVICE_ID': None,
        'TERMS_OF_SERVICE_URL': None,
        'PRIVACY_POLICY_ID': None,
        'PRIVACY_POLICY_URL': None,
        'misago_agreement': None,
    }

    terms_of_service = agreements.get(Agreement.TYPE_TOS)
    if terms_of_service:
        legal_context['TERMS_OF_SERVICE_ID'] = terms_of_service['id']
        if terms_of_service['link']:
            legal_context['TERMS_OF_SERVICE_URL'] = terms_of_service['link']
        elif terms_of_service['text']:
            legal_context['TERMS_OF_SERVICE_URL'] = reverse('misago:terms-of-service')

    privacy_policy = agreements.get(Agreement.TYPE_PRIVACY)
    if privacy_policy:
        legal_context['PRIVACY_POLICY_ID'] = privacy_policy['id']
        if privacy_policy['link']:
            legal_context['PRIVACY_POLICY_URL'] = privacy_policy['link']
        elif privacy_policy['text']:
            legal_context['PRIVACY_POLICY_URL'] = reverse('misago:privacy-policy')

    if legal_context:
        request.frontend_context.update(legal_context)

    required_agreement = get_required_user_agreement(request.user, agreements)
    if required_agreement:
        request.frontend_context['REQUIRED_AGREEMENT_API'] = reverse(
            'misago:api:submit-agreement', kwargs={'pk': required_agreement.pk})

        legal_context['misago_agreement'] = {
            'type': required_agreement.get_type_display(),
            'title': required_agreement.get_final_title(),
            'link': required_agreement.link,
            'text': get_parsed_agreement_text(request, required_agreement)
        }

    return legal_context
