<?php

namespace routes;

use classes\authentication;
use objects\logs_o;
use traits\route_t;

class userNotificationsRoute
{
    use route_t;

    public function run(): void
    {

        $this->put('/account/notifications', function () {
            // Require the user to be logged in
            global $response;
            self::requirePermission('user_notifications_update');
            $user = (new authentication())->get_user();
            if (!$user) {
                (new logs_o())->add('user_notifications', 'global', 0, 0, 'USER_NOTIFICATIONS_UPDATE', 'User not logged in');
                $response->error('Invalid session', 400);
            }
            /**
             * Parameters
             */
            $wash_certificate_email = self::isParametersSet(['wash_certificate_email']) ? (string)self::getParameter('wash_certificate_email') : null;
            $sms_notifications_enabled = self::isParametersSet(['sms_notifications_enabled']) ? (bool)self::getParameter('sms_notifications_enabled') : null;
            $email_notifications_enabled = self::isParametersSet(['email_notifications_enabled']) ? (bool)self::getParameter('email_notifications_enabled') : null;
            /**
             * Wash Certificate Email
             */
            if ($wash_certificate_email !== null) {
                self::requireMinLength('wash_certificate_email', 5);
                self::requireMaxLength('wash_certificate_email', 255);
                self::requireType($wash_certificate_email, self::type_string());
                if (!filter_var($wash_certificate_email, FILTER_VALIDATE_EMAIL)) {
                    (new logs_o())->add('user_notifications', 'global', 0, $user->id, 'USER_NOTIFICATIONS_UPDATE', 'Invalid wash certificate email');
                    $response->error('Invalid wash certificate email', 400);
                }
                $user->wash_certificate_email->set((string)$wash_certificate_email);
            }
            /**
             * SMS Notifications Enabled
             */
            if ($sms_notifications_enabled !== null) {
                self::requireType($sms_notifications_enabled, self::type_bool());
                $user->sms_notifications_enabled->set($sms_notifications_enabled ? 1 : 0);
            }
            /**
             * Email Notifications Enabled
             */
            if ($email_notifications_enabled !== null) {
                self::requireType($email_notifications_enabled, self::type_bool());
                $user->email_notifications_enabled->set($email_notifications_enabled ? 1 : 0);
            }
            // Log the update
            (new logs_o())->add('user_notifications', 'global', 0, $user->id, 'USER_NOTIFICATIONS_UPDATE', 'User notification settings updated');
            // Return success
            $response->success(['message' => 'User notification settings updated']);
        },
            [
                'user_notifications_update' => 'Update user notification settings',
            ]
        );
    }
}