from subprocess import check_output
from django.contrib import admin
from django.utils.html import format_html
from django.core.urlresolvers import reverse
from django.template.response import TemplateResponse
from django.views.defaults import server_error
from .models import LicenseModel
from .cli import serialGenerateWithORM, serialDeactivateWithORM, serialDelete

class LicenseAdmin(admin.ModelAdmin):
    change_form_template = 'admin/my_change_form.html'
    date_hierarchy = 'activation_date'
    # exclude = ['licensies']
    readonly_fields = (
        'serial',
        'expiration_date',
        'activation_date',
        'activated',
    )

    fields = [( 'serial','activated'), ('activation_date', 'expiration_date'),]
    # inlines = [LicenseActivatedInfoInline, LicenseHwDataInline ]
    #actions = [make_inactive]
    empty_value_display = ''
    list_display = ('serial','activated','activation_date','expiration_date',)
    #list_filter = (LicensesListActivatedFilter, LicensesListCustomersFilter,
    #               LicensesListTypesFilter)
    search_fields = ('serial',)

    def add_view(self, request, form_url='', extra_context=None):
        try:
            serial = serialGenerateWithORM(1)[0]
            return self.change_view(request, serial, extra_context)
        except:
            return server_error(request)

    def get_actions(self, request):
        actions = super().get_actions(request)
        # Get rid of defauld delete action
        if 'delete_selected' in actions:
            del actions['delete_selected']
        return actions

    actions = ['deactivate_selected', 'my_delete_selected']

    def deactivate_selected(self, request, objects):
        for o in objects.all():
            serialDeactivateWithORM(o.serial)
    deactivate_selected.short_description = 'Deactivate selected'

    def my_delete_selected(self, request, obj):
        for o in obj.all():
            serialDelete(o.serial)
            o.delete()
    my_delete_selected.short_description = "Delete selected"


admin.site.register(LicenseModel, LicenseAdmin)
