import os
from abc import ABC
from datetime import datetime

from django.contrib.admin import SimpleListFilter
from django.http import HttpResponseRedirect
from django.utils.translation import ugettext_lazy as _
from django.contrib import admin
from rangefilter.filters import DateRangeFilter, DateTimeRangeFilter
from django.urls import path
from ..automation.mautic import Mautic

SETTING = os.environ['WORKOUTTEST_SETTING']
if SETTING == "PROD" :
    from aitrainer_backoffice.aitrainer_backoffice.models.sports import Sport
    from aitrainer_backoffice.aitrainer_backoffice.models.customer import Customer
else:    
    from aitrainer_backoffice.models.sports import Sport
    from aitrainer_backoffice.models.customer import Customer

from ..automation.notification import NotificationExec

class SportFilter(SimpleListFilter, ABC):
    title = "Sport"
    parameter_name = 'sport_id'

    def lookups(self, request, model_admin):
        data = []
        for s in Sport.objects.filter():
            data.append([s.sport_id, s.name])
        return data

    def queryset(self, request, queryset):
        if self.value():
            return Customer.objects.filter(sport__sport_id=self.value())
        else:
            return queryset


class CustomerAdmin(admin.ModelAdmin):
    notif = NotificationExec()

    change_list_template = "controlling/mautic.html"
    list_display = ('customer_id', 'name','firstname', 'email', 'date_add', 'get_sport')
    list_filter = (
        ('date_add', DateRangeFilter),
        SportFilter
    )

    def get_sport(self, obj):
        return obj.sport.name

    get_sport.short_description = 'Sport'
    get_sport.admin_order_field = 'sport__name'


    # If you would like to add a default range filter
    # method pattern "get_rangefilter_{field_name}_default"
    def get_rangefilter_date_add_default(self, request):
        return (datetime.today(), datetime.today())

    # If you would like to change a title range filter
    # method pattern "get_rangefilter_{field_name}_title"
    def get_rangefilter_date_add_title(self, request, field_path):
        return _('Registered')

    def changelist_view(self, request, extra_context=None):
        if not request.GET.__contains__('date_add__range__gte'):
            q = request.GET.copy()
            q['date_add__range__gte'] = datetime.today()
            q['date_add__range__lte'] = datetime.today()
            request.GET = q
            request.META['QUERY_STRING'] = request.GET.urlencode()
        return super(CustomerAdmin, self).changelist_view(
            request, extra_context=extra_context)

    def get_urls(self):
        urls = super().get_urls()
        my_urls = [
            path('mautic_lang/', self.run_mautic),
            path('mautic_trial/', self.run_mautic_trial),
            path('notif/', self.run_notif),
        ]
        return my_urls + urls

    def run_notif(self, request):
        self.notif.run()
        return HttpResponseRedirect("../")

    def run_mautic(self, request):
        mautic = Mautic()
        mautic.syncLang()
        return HttpResponseRedirect("../")   
    
    def run_mautic_trial(self, request):
        mautic = Mautic()
        mautic.syncTrial()
        return HttpResponseRedirect("../")     


admin.site.register(Customer, CustomerAdmin)
admin.autodiscover()