<?php

namespace App\Http\Controllers\Admin\APIs\RestaurantApi;
use App\Models\NotificationDetails;
use Illuminate\Support\Facades\Validator;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Helpers\onesignalhelper;
use App\Models\IamPrincipal;
use Illuminate\Support\Facades\Log;
use Exception;



class RestNotificationController extends Controller
{
    /**
       * Created By :sayali parab
     * Created at : 4 June 2024
     * Use : To get notification.
     */
    public function getRestNotificationApi(Request $request)
    {
        try {

            $token = readRestHeaderToken();

            if ($token) {
                $customerIamId = $token['sub'];
                $perPage = $request->query('per_page', 10); // Default to 10 items per page
                $page = $request->query('page', 1); // Default to page 1

                if ($customerIamId) {
                    $notificationsData = NotificationDetails::where('principal_xid', $customerIamId)->orderBy('id', 'Desc')->get();

                    // Calculate the total number of items and total pages
                    $totalItems = $notificationsData->count();
                    $totalPages = ceil($totalItems / $perPage);

                    // Slice the collection based on the current page and items per page
                    $offset = ($page - 1) * $perPage;
                    $currentPageItems = $notificationsData->slice($offset, $perPage);

                    if (!empty($notificationsData)) {
                        return jsonResponseWithSuccessMessage(__('success.data_fetched_successfully'), $notificationsData, 200);
                    }
                }
            } else {
                return jsonResponseWithErrorMessageApi(__('auth.something_went_wrong'), 500);
            }
            return jsonResponseWithSuccessMessage(__('success.data_fetched_successfully'), $notificationsData, 200);
        } catch (\Exception $e) {
            Log::error(' get Notification Controller function  failed: ' . $e->getMessage());
            return jsonResponseWithErrorMessage(__('auth.something_went_wrong'), 500);
        }
    }

    /**
     * Created By :sayali parab
     * Created at : 4 June 2024
     * Use : To send notification.
     */
    public function sendRestNotificationApi(Request $request)
    {
        try {
            $playerId = $request->one_signal_player_id;
            $message = $request->message;
            $title = $request->title;
            $content_type = $request->content_type;
            $imageUrl = $request->image ? $request->image : null;

            $result = onesignalhelper::restSendNotificationApi($playerId, $title, $message, $content_type, $imageUrl, $id = null);

            return response()->json([
                'message' => 'Notification Sent Successfully!',
                'error_code' => 0,
                'status' => 200,
                'result' => $result,
            ]);
        } catch (\Exception $e) {
            return response()->json([
                'message' => "Network Error! Please try again after sometime.",
                'error_code' => 1,
                'status' => 500,
                'result' => null
            ]);
        }
    }
    /**
     * Created By :sayali parab
     * Created at : 4 June 2024
     * Use : To alert notification.
     */
    public function sendAlertNotificationApi(Request $request)
    {
        try {
            $token = readRestHeaderToken();
            if ($token) {
                $iam_principal_id = $token['sub'];
                $validator = Validator::make($request->all(), [
                    'status' => 'required|in:0,1',
                ]);

                if ($validator->fails()) {
                    return jsonResponseWithErrorMessageApi($validator->errors()->first(), 400);
                }

                $imPrincipal = IamPrincipal::where('id', $iam_principal_id)->first();

                if (!$imPrincipal) {
                    return jsonResponseWithErrorMessageApi(__('auth.user_not_found'), 404);
                }

                $imPrincipal->notification_status = $request->status;

                $imPrincipal->save();

                return jsonResponseWithSuccessMessage(__('auth.data_updated_successfully'), 200);
            } else {
                return jsonResponseWithErrorMessageApi(__('auth.user_not_found'), 409);
            }
        } catch (Exception $e) {
            Log::error('Contact form controller function failed: ' . $e);
            return jsonResponseWithErrorMessageApi(__('auth.something_went_wrong'), 500);
        }
    }
}
