from django.contrib import admin
from .models import MetasModels
from django.http import HttpResponse
import csv


@admin.register(MetasModels)
class MetasModelsAdmin(admin.ModelAdmin):
    list_display = (
        'especie', 'tipo_meta', 'quantidade', 'quantidade_acumulada_formatada',
        'percentual_cumprido_formatado', 'meta_atingida', 'status',
        'data_inicial', 'data_final', 'criado_por'
    )
    list_filter = ('tipo_meta', 'status', 'finalizado', 'criado_por')
    search_fields = ('especie__nome_popular', 'criado_por__username')
    autocomplete_fields = ['especie', 'criado_por']
    readonly_fields = ('data_criacao', 'data_atualizacao')

    fieldsets = (
        ('Informações da Meta', {
            'fields': (
                'especie', 'tipo_meta', 'quantidade',
                'data_inicial', 'data_final', 'status', 'finalizado'
            )
        }),
        ('Registro', {
            'fields': ('criado_por', 'data_criacao', 'data_atualizacao')
        }),
    )

    actions = ['exportar_csv']

    @admin.display(description='Acumulado')
    def quantidade_acumulada_formatada(self, obj):
        return f"{obj.quantidade_acumulada:.2f}"

    @admin.display(description='% Cumprido')
    def percentual_cumprido_formatado(self, obj):
        return f"{obj.percentual_cumprido:.2f}%"

    @admin.action(description="Exportar metas para CSV")
    def exportar_csv(self, request, queryset):
        response = HttpResponse(content_type='text/csv')
        response['Content-Disposition'] = 'attachment; filename=metas.csv'
        writer = csv.writer(response)
        headers = ['ID', 'Espécie', 'Tipo', 'Meta', 'Acumulado', '% Cumprido', 'Atingida', 'Status', 'Início', 'Fim', 'Criado por']
        writer.writerow(headers)

        for obj in queryset:
            writer.writerow([
                obj.id,
                obj.especie.nome_popular,
                obj.tipo_meta,
                obj.quantidade,
                f"{obj.quantidade_acumulada:.2f}",
                f"{obj.percentual_cumprido:.2f}",
                'Sim' if obj.meta_atingida else 'Não',
                obj.status,
                obj.data_inicial,
                obj.data_final,
                obj.criado_por.username if obj.criado_por else ''
            ])
        return response
