from .models import Ciclo, Configuracao
from django.shortcuts import get_object_or_404
from djtools.utils import rtr, httprr, permission_required
from .forms import SincronizacaoInicialForm, SelecionarUnidadeForm
from . import tasks
from .services import PnpService


@rtr()
@permission_required('pnp_ccv.view_configuracao')
def sincronizacao_inicial(request):
    title = 'Sincronização Inicial'
    form = SincronizacaoInicialForm(data=request.POST or None)
    if form.is_valid():
        service = PnpService(request.user)
        service.sincronizacao_inicial()
        return httprr(
            '/admin/pnp_ccv/configuracao/', 'Sincronização inicial realizada com sucesso. Realise o mapeamento dos turnos, cotas, raças e programas.'
        )
    return locals()


@rtr()
@permission_required('pnp_ccv.view_curso')
def importar_dados(request):
    title = 'Importar Dados'
    form = SelecionarUnidadeForm(data=request.POST or None)
    service = PnpService(request.user)
    form.fields['unidade'].choices = [
        [
            unidade['codigo'],
            unidade['nome'],
        ]
        for unidade in service.unidades_usuario()
    ]
    if form.is_valid():
        return tasks.importar_dados(request.user, form.cleaned_data['unidade'])
    return locals()


@rtr()
@permission_required('pnp_ccv.view_curso')
def alunos_ciclo(request, pk):
    obj = get_object_or_404(Ciclo.objects, pk=pk)
    title = obj.nome
    alunos = obj.get_dados_alunos()
    data_inicio = Configuracao.get_data_inicio()
    data_fim = Configuracao.get_data_fim()
    return locals()


@rtr()
@permission_required('pnp_ccv.view_curso')
def inscritos_ciclo(request, pk):
    obj = get_object_or_404(Ciclo.objects, pk=pk)
    title = obj.nome
    return locals()


@rtr('alunos_ciclo.html')
@permission_required('pnp_ccv.view_curso')
def evadidos_ciclo(request, pk):
    obj = get_object_or_404(Ciclo.objects, pk=pk)
    title = obj.nome
    alunos = obj.get_dados_alunos(obj.get_evadidos())
    data_inicio = Configuracao.get_data_inicio()
    data_fim = Configuracao.get_data_fim()
    return locals()


@rtr()
@permission_required('pnp_ccv.view_curso')
def exportar_dados(request):
    title = 'Exportação de Dados'
    cpf = request.user.get_profile().cpf.replace('.', '').replace('-', '')
    form = SelecionarUnidadeForm(data=request.POST or None)
    service = PnpService(request.user)
    if 'processar' in request.GET:
        codigo = request.GET['processar']
        url = '/pnp_ccv/exportar_dados/'
        iniciado = service.processar_dados(codigo)
        if iniciado:
            return httprr(url, 'Processamento iniciado com sucesso')
        else:
            return httprr(url, 'Erro ao iniciar processamento', tag='error')
    arquivos = service.arquivos_integracao()
    form.fields['unidade'].choices = [
        [
            unidade['codigo'],
            unidade['nome'],
        ]
        for unidade in service.unidades_usuario()
    ]
    if form.is_valid():
        return tasks.exportar_dados(request.user, form.cleaned_data['unidade'])
    return locals()


@rtr()
@permission_required('pnp_ccv.view_curso')
def resultado_pre_processamento(request, codigo):
    title = 'Resultado do Pré-Processamento'
    service = PnpService(request.user)
    arquivo = service.arquivo_integracao(codigo)
    return locals()


@rtr()
@permission_required('pnp_ccv.view_curso')
def resultado_processamento(request, codigo):
    title = 'Resultado do Processamento'
    service = PnpService(request.user)
    arquivo = service.arquivo_integracao(codigo)
    return locals()
