# app_ACT/views.py (ATUALIZADO)

from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from django.views.decorators.cache import never_cache
from django.contrib import messages
from django.http import HttpResponse # Importar HttpResponse para o download
import json
from .forms import ActForm
from .logic import calcular_correcoes # A sua lógica continua a mesma
from django.contrib.auth.decorators import login_required, permission_required # Adicione permission_required

@never_cache
@login_required
@permission_required('app_ACT.view_ferramentaact', raise_exception=True) 
def ferramenta_act(request):
    form = ActForm()
    registros = None
    dados_corrigidos_str = None
    
    # Limpa a sessão de dados antigos
    if 'dados_corrigidos_act' in request.session:
        del request.session['dados_corrigidos_act']

    if request.method == 'POST':
        # Precisamos de request.FILES para lidar com o upload de ficheiros
        form = ActForm(request.POST, request.FILES)
        
        if form.is_valid():
            json_file = form.cleaned_data['json_entrada']
            
            try:
                # Lê o conteúdo do ficheiro carregado em memória
                texto_atual = json_file.read().decode('utf-8')
                
                # 1. Tenta calcular as correções
                registros, dados_original, dados_corrigidos = calcular_correcoes(texto_atual)
                
                # 2. Prepara o JSON corrigido para exibição na textarea
                dados_corrigidos_str = json.dumps(dados_corrigidos, indent=4, ensure_ascii=False)
                
                # 3. GUARDA O RESULTADO NA SESSÃO para o download
                request.session['dados_corrigidos_act'] = dados_corrigidos_str
                
                if not registros:
                    messages.info(request, "Nenhuma alteração necessária encontrada. Os campos já atendem às regras.")
                else:
                    messages.success(request, "Análise concluída. Verifique as correções abaixo e faça o download.")

            except json.JSONDecodeError:
                messages.error(request, "Erro: O ficheiro JSON enviado está mal formatado.")
            except UnicodeDecodeError:
                messages.error(request, "Erro: Não foi possível ler o ficheiro. Verifique se a codificação é UTF-8.")
            except Exception as e:
                messages.error(request, f"Ocorreu um erro inesperado: {e}")

    context = {
        'form': form,
        'registros': registros,
        'dados_corrigidos_str': dados_corrigidos_str
    }
    
    return render(request, 'app_ACT/ferramenta_act.html', context)

# --- VIEW PARA O DOWNLOAD ---

@login_required
def act_download(request):
    # 1. Pega os dados corrigidos da sessão (e remove-os)
    dados_corrigidos_str = request.session.pop('dados_corrigidos_act', None)

    if not dados_corrigidos_str:
        # Se não houver dados na sessão, redireciona de volta com um erro
        messages.error(request, "Não há ficheiro corrigido para baixar. Por favor, analise um ficheiro primeiro.")
        return redirect('ferramenta_act')

    # 2. Cria uma resposta HTTP com o conteúdo JSON
    response = HttpResponse(dados_corrigidos_str, content_type='application/json')
    
    # 3. Define o cabeçalho para forçar o download com um nome de ficheiro
    response['Content-Disposition'] = 'attachment; filename="ficheiro_corrigido_ACT.json"'
    
    return response