'''
App Admin Customization
'''
from django.conf import settings

from django.contrib import admin
from django.contrib import messages as flash_messages
from django.contrib.admin import helpers
from django.utils.translation import gettext_lazy as _
from app.models import (City, EmailMessage, Country, State,)
                       


def make_as_active(_modeladmin, _request, queryset):
    '''
    Bulk Activate
    '''
    rows_updated = queryset.update(is_active=True)
    if rows_updated == 1:
        message_bit = "1 %s was" % (_modeladmin.model._meta.verbose_name)
    else:
        message_bit = "%s %s were" % (
            rows_updated, _modeladmin.model._meta.verbose_name_plural)
    _modeladmin.message_user(
        _request, "%s successfully marked as active." % message_bit)


make_as_active.short_description = "Mark selected as Active"


def make_as_disabled(_modeladmin, _request, queryset):
    '''
    Deactivate Dropdown on listing
    '''
    rows_updated = queryset.update(is_active=False)
    if rows_updated == 1:
        message_bit = "1 %s was" % (_modeladmin.model._meta.verbose_name)
    else:
        message_bit = "%s %s were" % (
            rows_updated, _modeladmin.model._meta.verbose_name_plural)
    _modeladmin.message_user(
        _request, "%s successfully marked as deactivate." % message_bit)


make_as_disabled.short_description = "Mark selected as Deactivate"



class AdminCountry(admin.ModelAdmin):
    '''
    Admin Class for State Model
    '''

    models = Country
    list_display = ['name', 
                    'is_active']
    search_fields = ['name', ]
    list_filter = ['is_active']
    actions = [make_as_active, make_as_disabled]

    def get_actions(self, request):
        '''
         Disable actions on a per-request
         by overriding ModelAdmin.get_actions()
         Most of the time you’ll use this method to
         conditionally remove actions from the list
         gathered by the superclass.

         Here we remove delete_selected action from dropdown
         '''
        _ = self.__class__
        actions = super(AdminCountry, self).get_actions(request)
        del actions['delete_selected']
        return actions


class AdminState(admin.ModelAdmin):
    '''
    Admin Class for State Model
    '''

    models = State
    list_display = ['name', 'country',
                    'is_active']
    search_fields = ['name', 'country']
    list_filter = ['is_active']
    actions = [make_as_active, make_as_disabled]

    def get_actions(self, request):
        '''
         Disable actions on a per-request
         by overriding ModelAdmin.get_actions()
         Most of the time you’ll use this method to
         conditionally remove actions from the list
         gathered by the superclass.

         Here we remove delete_selected action from dropdown
         '''
        _ = self.__class__
        actions = super(AdminState, self).get_actions(request)
        del actions['delete_selected']
        return actions


class AdminCity(admin.ModelAdmin):
    '''
    Admin Class for City Model
    '''

    models = City
    list_display = ['name', 'state',
                    'is_active']
    search_fields = ['name', 'state']
    list_filter = ['is_active']
    actions = [make_as_active, make_as_disabled]

    def get_actions(self, request):
        '''
         Disable actions on a per-request
         by overriding ModelAdmin.get_actions()
         Most of the time you’ll use this method to
         conditionally remove actions from the list
         gathered by the superclass.

         Here we remove delete_selected action from dropdown
         '''
        _ = self.__class__
        actions = super(AdminCity, self).get_actions(request)
        del actions['delete_selected']
        return actions



class AdminEmailMessage(admin.ModelAdmin):
    '''
    Admin Class for Email Message
    '''
    models = EmailMessage
    list_display = ['from_email', 'to_email', 'subject',
                    'sent_status', 'sent_date', 'create_date']

    def has_add_permission(self, request):
        '''
        Access denied admin user to create new object.
        Remove Add Object button from listing page.
        It gives 403 page if someone tried with direct
        url type.
        '''
        _ = self.__class__
        return False



'''
Register models in admin-portal
and crud options are working on admin section.
user "admin.site.register(model_name)" to 
register. If you want to unregister a model
from admin use "admin.site.unregister(model_name)"
'''
admin.site.register(Country, AdminCountry)
admin.site.register(State, AdminState)
admin.site.register(City, AdminCity)

admin.site.register(EmailMessage, AdminEmailMessage)
