from django.contrib import admin
from .models import Saidas, CadastroSaida, SaidasEspecies
from django.http import HttpResponse
import csv


@admin.register(Saidas)
class SaidasAdmin(admin.ModelAdmin):
    list_display = ('semeadura', 'data_saidas', 'quantidade_saidas', 'finalizado')
    list_filter = ('finalizado', 'data_saidas')
    search_fields = ('semeadura__numero_muda', 'semeadura__lote__numero_lote')
    autocomplete_fields = ['semeadura']

    actions = ['marcar_como_finalizado', 'exportar_csv']

    @admin.action(description="Marcar como finalizado")
    def marcar_como_finalizado(self, request, queryset):
        updated = queryset.update(finalizado=True)
        self.message_user(request, f"{updated} registros marcados como finalizados.")

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


class SaidasEspeciesInline(admin.TabularInline):
    model = SaidasEspecies
    extra = 0
    readonly_fields = ('data_venda',)


@admin.register(CadastroSaida)
class CadastroSaidaAdmin(admin.ModelAdmin):
    list_display = (
        'numero_protocolo', 'cliente', 'empresa', 'cidade', 'tel', 'data_criacao'
    )
    search_fields = (
        'numero_protocolo', 'cliente', 'empresa', 'cidade', 'cpf_cnpj'
    )
    list_filter = ('cidade', 'tipo_pagamento')
    readonly_fields = ('data_criacao',)
    inlines = [SaidasEspeciesInline]

    fieldsets = (
        ('Informações do Cliente', {
            'fields': (
                'numero_protocolo', 'referente_nf', 'cliente', 'empresa',
                'cpf_cnpj', 'inscricao_estadual', 'email', 'tel', 'cep'
            )
        }),
        ('Endereço e Destino', {
            'fields': ('end', 'cidade', 'destino_mudas', 'placa', 'responsavel_recebimento')
        }),
        ('Informações do Pedido', {
            'fields': ('tipo_pagamento', 'numero_pedido')
        }),
        ('Responsáveis Técnicos', {
            'fields': ('produtor', 'renasem_produtor', 'responsavel_tecnico', 'renasem_tecnico')
        }),
        ('Outros', {
            'fields': ('data_criacao',)
        }),
    )

    actions = ['exportar_csv']

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


@admin.register(SaidasEspecies)
class SaidasEspeciesAdmin(admin.ModelAdmin):
    list_display = (
        'cadastrosaida', 'semeadura', 'numero_lote', 'nome_popular', 'categoria',
        'qtd_especie', 'valor_uni', 'valor_total', 'data_venda'
    )
    search_fields = (
        'nome_popular', 'nome_cientifico', 'numero_lote', 'categoria'
    )
    list_filter = ('categoria', 'data_venda')
    autocomplete_fields = ['cadastrosaida', 'semeadura']
    readonly_fields = ('data_venda',)
