from django.shortcuts import render
from django.urls import reverse_lazy
from django.views import View
from django.views.generic import FormView

from retriever.forms import UploadForm
from retriever.models import RetrieverTask, UploadFile, KeywordParagraph, Keywords
from .tasks import start_retriever_job

# Create your views here.


class KeywordRetrieverView(FormView):
    form_class = UploadForm
    template_name = "index.html"  # Replace with your template.

    # def get(self, request, *args, **kwargs):
    #     form = FileFieldForm()
    #     return render(request, 'index.html', {'form': form})

    def form_valid(self, form):
        # 创建任务
        keyword_list = list(Keywords.objects.filter(is_active=True).values_list('keyword', flat=True))
        r_task = RetrieverTask.objects.create(task_keywords=keyword_list)
        self.task_uuid = r_task.task_uuid

        # print(r_task.task_keywords)
        # 将上传的文件保存到数据库
        for each in form.cleaned_data['attachments']:
            UploadFile.objects.create(related_task=r_task, file_name=each.name, file=each)
        return super(KeywordRetrieverView, self).form_valid(form)

    def get_success_url(self):
        # 重写success_url,跳转到任务查看页面
        return reverse_lazy('task_viewer', kwargs={'task_uuid': self.task_uuid})


class TaskViewerView(View):
    def get(self, requests, task_uuid):
        # print(self.kwargs['task_uuid'])
        current_task = RetrieverTask.objects.get(task_uuid=task_uuid)  # 获取当前任务
        if not current_task.task_started:
            # 如果任务未开始,则调用异步任务
            current_task.task_started = True
            current_task.save()
            start_retriever_job.delay(current_task.task_uuid)  # 调用异步任务
        return render(requests, 'task_viewer.html', {'current_task': current_task})