from django.contrib import admin

from .models import (MeasurementUnit, MeasurementType, Container, Material,
                     Color)


class MeasurementUnitAdmin(admin.ModelAdmin):
    list_display = ('name', 'code', 'unit_class', 'description', 'sort_order')
    list_display_links = ('name',)
    search_fields = ('name', 'code', 'unit_class', 'description')
    list_per_page = 25
    fields = ('name', 'code', 'unit_class', 'description', 'sort_order')


class MeasurementTypeAdmin(admin.ModelAdmin):
    list_display = ('name', 'code', 'measurement_type_class', 'description',
                    'measurement_unit_code', 'sort_order')
    list_display_links = ('name',)
    search_fields = ('name', 'code', 'measurement_type_class',
                     'default_measurement_unit__code', 'description')
    list_per_page = 25
    fields = ('name', 'code', 'measurement_type_class', 'description',
              'default_measurement_unit', 'sort_order')

    def measurement_unit_code(self, obj):
        dmu = obj.default_measurement_unit
        return dmu.code if dmu else dmu
    measurement_unit_code.admin_order_field = 'default_measurement_unit__code'
    measurement_unit_code.short_description = 'Default Measurement Unit'


class ContainerAdmin(admin.ModelAdmin):
    list_display = ('name', 'code', 'application', 'color_name',
                    'material_name', 'volume', 'measurement_unit_name',
                    'sort_order')
    list_display_links = ('name',)
    search_fields = ('name', 'code', 'application', 'color__name',
                     'material__name', 'volume', 'measurement_unit__name')
    list_per_page = 25
    fields = ('name', 'code', 'application', 'color', 'material', 'volume',
              'measurement_unit', 'sort_order')

    def color_name(self, obj):
        return obj.color.name if obj.color else obj.color
    color_name.admin_order_field = 'color__name'
    color_name.short_description = 'Color'

    def material_name(self, obj):
        return obj.material.name if obj.material else obj.material
    material_name.admin_order_field = 'material__name'
    material_name.short_description = 'Material'

    def measurement_unit_name(self, obj):
        mu = obj.measurement_unit
        return mu.name if mu else mu
    measurement_unit_name.admin_order_field = 'measurement_unit__name'
    measurement_unit_name.short_description = 'Measurement Unit'


class MaterialAdmin(admin.ModelAdmin):
    list_display = ('name', 'code', 'material_class', 'description',
                    'sort_order')
    list_display_links = ('name',)
    search_fields = ('name', 'code', 'material_class', 'description')
    list_per_page = 25
    fields = ('name', 'code', 'material_class', 'description', 'sort_order')


class ColorAdmin(admin.ModelAdmin):
    list_display = ('name', 'code', 'color_number', 'sort_order')
    list_display_links = ('name',)
    search_fields = ('name', 'code', 'color_number')
    list_per_page = 25
    fields = ('name', 'code', 'color_number', 'sort_order')


admin.site.register(MeasurementUnit, MeasurementUnitAdmin)
admin.site.register(MeasurementType, MeasurementTypeAdmin)
admin.site.register(Container, ContainerAdmin)
admin.site.register(Material, MaterialAdmin)
admin.site.register(Color, ColorAdmin)