"""User settings API."""
from django.utils import timezone
from rest_framework.views import APIView

from core.models import UserSetting
from .auth_utils import ok, err
from .permissions import IsAppUser
from .serializers import UserSettingSerializer


class UserSettingsView(APIView):
    permission_classes = [IsAppUser]

    def get(self, request):
        obj, _ = UserSetting.objects.get_or_create(
            user=request.app_user,
            defaults={'created_at': timezone.now(), 'updated_at': timezone.now()},
        )
        return ok(UserSettingSerializer(obj).data)

    def put(self, request):
        obj, _ = UserSetting.objects.get_or_create(user=request.app_user)
        s = UserSettingSerializer(obj, data=request.data, partial=True)
        if not s.is_valid():
            return err(str(s.errors), 400)
        s.save(updated_at=timezone.now())
        return ok(s.data, 'Settings updated.')
