from django.db.models import Count
from rest_framework import status
from rest_framework.exceptions import ValidationError

from api.models import TtAcademicTerm
from api.utils import log_critical_error, get_exception_detail
from api.views.admin.base import AdminApiBase
from api.translation import __


class AcademicTermList(AdminApiBase):
    def post(self, request):
        try:
            self.api_log_skip_outgoing_data = True
            data = self.get_data(request)
            return self.api_response(data={"data": data})
        except ValidationError as e:
            return self.api_response(
                error=e.detail["error"],
                errors=e.detail["errors"],
                code=status.HTTP_400_BAD_REQUEST
            )
        except Exception as e:
            e_details = get_exception_detail(e)
            log_critical_error(
                user_id=None,
                descr=e_details["descr"],
                url=e_details["url"],
                trace=e_details["trace"]
            )
            return self.api_response(
                error=__("message.internal_server_error"),
                code=status.HTTP_500_INTERNAL_SERVER_ERROR
            )


    def get_data(self, request):
        academic_term = (
            TtAcademicTerm.objects
            .all()
        )

        return_data = []

        for val in academic_term:
            data = {}
            data["id"] = val.id
            data["name"] = ("("+__("attr.academic_term_status.2") + ") " if val.status == TtAcademicTerm.STATUS_TO_CODE["inactive"] else "") + val.name
            data["code"] = val.code

            return_data.append(data)

        return return_data