from django.contrib import admin
from .models import (
    Protocolo, ProtocoloSemeadura,
    ProtocoloFinalizado, ProtocoloSemeaduraFinalizado
)
from django.http import HttpResponse
import csv


class ProtocoloSemeaduraInline(admin.TabularInline):
    model = ProtocoloSemeadura
    extra = 0


@admin.register(Protocolo)
class ProtocoloAdmin(admin.ModelAdmin):
    list_display = (
        'num_protocolo', 'get_cliente_nome', 'tipo_cliente', 'tipo_pagamento',
        'data_criacao', 'data_saida_protocolo', 'finalizado'
    )
    list_filter = ('tipo_cliente', 'tipo_pagamento', 'finalizado', 'data_criacao')
    search_fields = ('num_protocolo', 'cliente_fisico__nome_completo', 'cliente_empresa__nome_fantasia')
    autocomplete_fields = ['cliente_fisico', 'cliente_empresa', 'semeadura']
    inlines = [ProtocoloSemeaduraInline]

    fieldsets = (
        ('Informações do Cliente', {
            'fields': ('tipo_cliente', 'cliente_fisico', 'cliente_empresa')
        }),
        ('Detalhes do Protocolo', {
            'fields': (
                'num_protocolo', 'referente_nf', 'tipo_pagamento', 'num_pedido',
                'destino_muda', 'placa_veiculo', 'resp_recebimento', 'inscricao_estadual',
                'data_criacao', 'data_saida_protocolo', 'finalizado'
            )
        }),
        ('Responsáveis e Observações', {
            'fields': ('produtor', 'renasem_produtor', 'resp_tecnico', 'renasem_tecnico', 'observacao')
        }),
    )

    actions = ['exportar_csv']

    def get_cliente_nome(self, obj):
        if obj.tipo_cliente == 'F' and obj.cliente_fisico:
            return obj.cliente_fisico.nome_completo
        elif obj.tipo_cliente == 'E' and obj.cliente_empresa:
            return obj.cliente_empresa.nome_fantasia
        return '-'
    get_cliente_nome.short_description = 'Cliente'

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


@admin.register(ProtocoloSemeadura)
class ProtocoloSemeaduraAdmin(admin.ModelAdmin):
    list_display = (
        'protocolo', 'semeadura', 'categoria', 'qtd_especie',
        'valor_unit', 'valor_total', 'data_venda'
    )
    search_fields = ('protocolo__num_protocolo', 'semeadura__numero_muda')
    autocomplete_fields = ['protocolo', 'semeadura']
    list_filter = ('categoria', 'data_venda')


class ProtocoloSemeaduraFinalizadoInline(admin.TabularInline):
    model = ProtocoloSemeaduraFinalizado
    extra = 0
    readonly_fields = ('semeadura', 'categoria', 'qtd_especie', 'valor_unit', 'valor_total', 'data_venda')


@admin.register(ProtocoloFinalizado)
class ProtocoloFinalizadoAdmin(admin.ModelAdmin):
    list_display = (
        'num_protocolo', 'get_cliente_nome', 'data_criacao', 'data_finalizacao',
        'usuario_finalizacao', 'finalizado'
    )
    search_fields = ('num_protocolo', 'cliente_fisico__nome_completo', 'cliente_empresa__nome_fantasia')
    list_filter = ('tipo_cliente', 'finalizado', 'data_finalizacao')
    readonly_fields = [field.name for field in ProtocoloFinalizado._meta.fields]
    inlines = [ProtocoloSemeaduraFinalizadoInline]

    def get_cliente_nome(self, obj):
        if obj.tipo_cliente == 'F' and obj.cliente_fisico:
            return obj.cliente_fisico.nome_completo
        elif obj.tipo_cliente == 'E' and obj.cliente_empresa:
            return obj.cliente_empresa.nome_fantasia
        return '-'
    get_cliente_nome.short_description = 'Cliente'

    def has_add_permission(self, request):
        return False

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


@admin.register(ProtocoloSemeaduraFinalizado)
class ProtocoloSemeaduraFinalizadoAdmin(admin.ModelAdmin):
    list_display = (
        'protocolo_finalizado', 'semeadura', 'categoria', 'qtd_especie',
        'valor_unit', 'valor_total', 'data_venda'
    )
    search_fields = ('protocolo_finalizado__num_protocolo', 'semeadura__numero_muda')
    list_filter = ('categoria', 'data_venda')
    readonly_fields = [field.name for field in ProtocoloSemeaduraFinalizado._meta.fields]

    def has_add_permission(self, request):
        return False

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