# -*- coding: utf-8 -*-
import json
from django.contrib import admin
from django.utils.translation import ugettext_lazy as _
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
from weixin.models import Menu
from wechat_sdk.exceptions import OfficialAPIError
from config_models.admin import ConfigurationModelAdmin
from weixin.wechat import get_wechat

wechat = get_wechat()


class MenuAdmin(ConfigurationModelAdmin):

    readonly_fields = ('response',)

    def get_actions(self, request):
        return {
            'revert': (
                MenuAdmin.revert,
                'revert',
                _('Revert to the selected configuration')),
            'delete_weixin_menu': (
                MenuAdmin.delete_weixin_menu,
                'delete_weixin_menu',
                _('Delete weixin menu'),
            )
        }

    def save_model(self, request, obj, form, change):
        obj.changed_by = request.user
        obj.save(action_type='create')

    def revert(self, request, queryset):
        """
        Admin action to revert a configuration back to the selected value
        """
        if queryset.count() != 1:
            self.message_user(request, _("Please select a single configuration to revert to."))
            return
        target = queryset[0]
        target.id = None
        target.changed_by = request.user
        target.save(action_type='create')
        self.message_user(request, _("Reverted configuration."))
        return HttpResponseRedirect(
            reverse(
                'admin:{}_{}_change'.format(
                    self.model._meta.app_label,
                    self.model._meta.model_name,
                ),
                args=(target.id,),
            )
        )

    def delete_weixin_menu(self, request, queryset):
        menu = self.model()
        menu.changed_by = request.user
        menu.data = '{}'
        menu.enabled = False
        menu.save(action_type='delete')
        self.message_user(request, _("Delete Weixin Menu."))
        return HttpResponseRedirect(reverse('admin:{}_{}_changelist'.format(
            self.model._meta.app_label, self.model._meta.model_name,)))


admin.site.register(Menu, MenuAdmin)