from django.contrib import admin
from .models import CadastroLote, Semeadura, LogExclusaoLote
from django.http import HttpResponse
import csv


@admin.register(CadastroLote)
class CadastroLoteAdmin(admin.ModelAdmin):
    list_display = (
        'numero_lote', 'fornecedor', 'data_lote', 'ano', 'quebra_dormencia',
        'entrada_sementes_kg', 'qtd_sementes_minimo', 'qtd_sementes_maximo', 'registrado_por'
    )
    list_filter = ('ano', 'quebra_dormencia', 'registrado_por')
    search_fields = ('numero_lote', 'fornecedor')
    readonly_fields = ('numero_lote',)
    autocomplete_fields = ['especie', 'registrado_por']

    fieldsets = (
        ('Identificação do Lote', {
            'fields': (
                'numero_lote', 'especie', 'fornecedor', 'data_lote', 'ano', 'nf_fiscal',
                'camera_fria', 'quebra_dormencia', 'registrado_por'
            )
        }),
        ('Sementes', {
            'fields': (
                'entrada_sementes_kg', 'qtd_sementes_minimo', 'qtd_sementes_maximo',
                'estimativa_minima', 'estimativa_maxima', 'estimativa_media'
            )
        }),
    )

    actions = ['exportar_csv']

    @admin.action(description="Exportar lotes para CSV")
    def exportar_csv(self, request, queryset):
        response = HttpResponse(content_type='text/csv')
        response['Content-Disposition'] = 'attachment; filename=cadastro_lotes.csv'
        writer = csv.writer(response)
        writer.writerow([field.name for field in CadastroLote._meta.fields])
        for obj in queryset:
            writer.writerow([getattr(obj, field.name) for field in CadastroLote._meta.fields])
        return response


@admin.register(Semeadura)
class SemeaduraAdmin(admin.ModelAdmin):
    list_display = (
        'numero_muda', 'data_semeia', 'qtd_sementes_utilizada',
        'sobra_sementes', 'cliente', 'empresa', 'metodo_semeadura', 'registrado_por'
    )
    list_filter = ('metodo_semeadura', 'registrado_por')
    search_fields = (
        'numero_muda', 'cliente__nome_completo', 'empresa__nome_fantasia', 'lote__numero_lote'
    )
    autocomplete_fields = ['cliente', 'empresa', 'lote', 'registrado_por']

    fieldsets = (
        ('Identificação da Semeadura', {
            'fields': (
                'numero_muda', 'lote', 'cliente', 'empresa',
                'data_semeia', 'metodo_semeadura', 'local_semeadura', 'abertura'
            )
        }),
        ('Dados da Semente', {
            'fields': (
                'qtd_sementes_utilizada', 'sobra_sementes', 'nova_media'
            )
        }),
        ('Registro', {
            'fields': ('registrado_por',)
        }),
    )

    actions = ['exportar_csv']

    @admin.action(description="Exportar semeaduras para CSV")
    def exportar_csv(self, request, queryset):
        response = HttpResponse(content_type='text/csv')
        response['Content-Disposition'] = 'attachment; filename=semeaduras.csv'
        writer = csv.writer(response)
        writer.writerow([field.name for field in Semeadura._meta.fields])
        for obj in queryset:
            writer.writerow([getattr(obj, field.name) for field in Semeadura._meta.fields])
        return response


@admin.register(LogExclusaoLote)
class LogExclusaoLoteAdmin(admin.ModelAdmin):
    list_display = (
        'numero_lote', 'fornecedor', 'data_lote',
        'data_exclusao', 'hora_exclusao',
        'usuario_exclusao', 'nome_usuario_exclusao',
        'motivo_formatado'
    )
    list_filter = ('data_exclusao', 'motivo_exclusao')
    search_fields = ('numero_lote', 'nome_usuario_exclusao', 'motivo_exclusao')
    readonly_fields = [
        'lote_id', 'numero_lote', 'fornecedor', 'data_lote',
        'data_exclusao', 'hora_exclusao',
        'usuario_exclusao', 'nome_usuario_exclusao',
        'motivo_exclusao', 'motivo_exclusao_outros'
    ]

    def motivo_formatado(self, obj):
        if obj.motivo_exclusao == 'Outros' and obj.motivo_exclusao_outros:
            return f"{obj.motivo_exclusao} - {obj.motivo_exclusao_outros}"
        return obj.motivo_exclusao

    motivo_formatado.short_description = "Motivo"

    def has_add_permission(self, request):
        return False

    def has_change_permission(self, request, obj=None):
        return False

    def has_delete_permission(self, request, obj=None):
        return False
