from django.contrib import admin
from .models import Repique, LogFinalizacaoRepique
from django.http import HttpResponse
import csv


@admin.register(Repique)
class RepiqueAdmin(admin.ModelAdmin):
    list_display = (
        'semeadura', 'cadastro_lote', 'data_repique',
        'quantidade_repicada', 'funcionario', 'finalizado', 'registrado_por'
    )
    list_filter = ('finalizado', 'data_repique', 'funcionario')
    search_fields = (
        'semeadura__numero_muda', 'cadastro_lote__numero_lote', 'funcionario__nome_completo'
    )
    autocomplete_fields = ['semeadura', 'cadastro_lote', 'funcionario', 'registrado_por']

    fieldsets = (
        ('Informações do Repique', {
            'fields': (
                'semeadura', 'cadastro_lote', 'data_repique',
                'quantidade_repicada', 'funcionario', 'registrado_por', 'finalizado'
            )
        }),
    )

    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} repiques marcados como finalizados.")

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


@admin.register(LogFinalizacaoRepique)
class LogFinalizacaoRepiqueAdmin(admin.ModelAdmin):
    list_display = (
        'semeadura', 'numero_lote', '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 = [
        'semeadura', 'numero_lote', '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
