# Copyright (C) 2018-2024 by BDE ENS Paris-Saclay
# SPDX-License-Identifier: GPL-3.0-or-later

from django.urls import reverse_lazy
from django.db import transaction
from django.utils.translation import gettext_lazy as _
from django.utils import timezone
from datetime import timedelta
from permission.views import ProtectQuerysetMixin, ProtectedCreateView
from django.shortcuts import render

from .forms import BasicFoodForms, TransformedFoodForms, AllergenForms
from .models import BasicFood, TransformedFood, Allergen


class BasicFoodCreateView(ProtectQuerysetMixin, ProtectedCreateView):
#####################################################################
# TO DO
# - fix picture save
# - implement solution crop and convert image (reuse or recode ImageForm from members apps
# - implement AllergenForms
# - redirect to another view after the poll is submitted
#####################################################################
    """
    A view to add a basic food
    """
    model = BasicFood
    form_class = BasicFoodForms
    template_name = 'food/basic_food_form.html'
    extra_context = {"title": _("Add a new aliment")}
    
    def get_sample_object(self):
        return BasicFood(
            name="",
            is_DLC=False,
            is_DDM=False,
            expiry_date=timezone.now(),
            label='pic/default.png',
        )
    
    @transaction.atomic
    def form_valid(self, form):
        form.instance.creater = self.request.user
        basic_food_form = BasicFoodForms(data=self.request.POST)
        allergen_form = AllergenForms(data=self.request.POST)
        if not basic_food_form.is_valid() or not allergen_form.is_valid():
            return self.form_invalid(form)

        # Save the aliment and the allergens associed
        basic_food = form.save(commit=False)
        # We assume the date of labeling and the same as the date of arrival
        basic_food.arrival_date = timezone.now
        basic_food._force_save = True
        basic_food.save()
        basic_food.refresh_from_db()
        return super().form_valid(form)

    def get_success_url(self, **kwargs):
        self.object.refresh_from_db()
        # TEMPORARY, I create a fonctionnal view before
        # return reverse_lazy('food:basicfood', kwargs={"pk": self.object.pk})
        return '0'

class TransformedFoodCreateView(ProtectQuerysetMixin, ProtectedCreateView):
###############################################
# TO DO
# -redirect to another view after submit
###############################################
    """
    A view to add a tranformed food
    """
    model = TransformedFood
    template_name = 'food/transformed_food_form.html'
    form_class = TransformedFoodForms
    extra_context = {"title": _("Add a new meal")}
    
    def get_sample_object(self):
        return TransformedFood(
            name="",
            creation_date=timezone.now(),
        )
    
    @transaction.atomic
    def form_valid(self, form):
        form.instance.creater = self.request.user
        transformed_food_form = TransformedFoodForms(data=self.request.POST)
        if not transformed_food_form.is_valid():
            return self.form_invalid(form)

        # Save the aliment and allergens associated
        transformed_food = form.save(commit=False)
        # Without microbiological analyzes, the storage time is 3 days
        transformed_food.expiry_date = transformed_food.creation_date + timedelta(days = 3)
        transformed_food._force_save =  True
        transformed_food.save()
        transformed_food.refresh_from_db()
        return super().form_valid(form)


    def get_success_url(self, **kwargs):
        self.object.refresh_from_db()
        # TEMPORARY, I create a fonctionnal view before
        # return reverse_lazy('food:tranformed_food', kwargs={"pk": self.object.pk})
        return '1'
