<?php

namespace App\Http\Controllers\Admin;

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

class ManageNotificationsController extends Controller
{
    public function index(Request $request)
    {
        /**
         * Created By : Sayli Raut
         * Created at : 11 June 2024
         * Use : To list notifications.
         */
        $activeQuery = $request->query('active');

        if ($activeQuery == 4) { // for customer
            $notifications = NotificationDetails::with('Notification')
                ->whereHas('Notification', function ($query) {
                    $query->where('principal_type_xid', 3);
                })
                ->latest()
                ->take(12)
                ->get();
        } else if ($activeQuery == 3) { // for restaurant
            $notifications = NotificationDetails::with('Notification')
                ->whereHas('Notification', function ($query) {
                    $query->where('principal_type_xid', 4);
                })
                ->latest()
                ->take(12)
                ->get();

            // return $notifications;
        } else {
            $notificationsOfType3 = NotificationDetails::with('Notification')
                ->whereHas('Notification', function ($query) {
                    $query->where('principal_type_xid', 3);
                })
                ->latest()
                ->take(12)
                ->get();

            $notificationsOfType4 = NotificationDetails::with('Notification')
                ->whereHas('Notification', function ($query) {
                    $query->where('principal_type_xid', 4);
                })
                ->latest()
                ->take(12)
                ->get();

            $notifications = $notificationsOfType3->merge($notificationsOfType4);
        }

        return view('Admin.pages.manage_notification.manage_notification', compact('notifications'));
    }

    /**
     * Created By : Sayli Raut
     * Created at : 10 June 2024
     * Use : To view notification details.s
     */
    public function add()
    {
        $state = ManageState::where('is_active', 1)->get()->toArray();
        return view('Admin.pages.manage_notification.manage_notifications_add',  compact('state'));
    }

    /**
     * Created By : Sayli Raut
     * Created at : 10 June 2024
     * Use : To add notification .
     */
    public function store_notificaton_data(Request $request)
{
    try {
        $request->validate([
            'image' => 'required|image|mimes:jpeg,png,jpg,gif|max:2048',
        ]);

        DB::beginTransaction();

        if (isset($request->image)) {
            $image = $request->image;
            $image_db = null;
        } else {
            $image = null;
            $image_db = $request->image;
        }

        $tnormalImage = saveSingleImageWithoutCrop($image, 'notification_images', $image_db);
        $imagePath = ListingImageUrl('notification_images', $tnormalImage);

        // Fetch OneSignal IDs based on the selected states and user type
        $states = $request->states;

        $userQuery = IamPrincipal::where('is_active', 1)
            ->where('notification_status', 1)
            ->where('principal_type_xid', 3)
            ->whereIn('state_xid', $states);


        if ($request->user_type == 1) {
            $allCustomerOneSignalIds = $userQuery->pluck('id');
            $UserData = IamPrincipal::whereIn('id', $allCustomerOneSignalIds)->get();

            foreach ($UserData as $customerIdItem) {
                if ($customerIdItem->one_signal_player_id) {
                    onesignalhelper::sendNotificationApi(
                        $customerIdItem->one_signal_player_id,
                        $request->title,
                        $request->description,
                        'Dashboard Notification',
                        $imagePath,
                        $id = null
                    );
                }
                onesignalhelper::StoreNotificationDetails($customerIdItem->id, 'Notification', $request->title, $imagePath);
            }
        } elseif ($request->user_type == 2) {
            $allRestaurantOneSignalIds = $userQuery->pluck('id');
            $restaurantData = IamPrincipal::whereIn('id', $allRestaurantOneSignalIds)->get();

            foreach ($restaurantData as $restIdItem) {
                if ($restIdItem->one_signal_player_id) {
                    onesignalhelper::sendNotificationApi(
                        $restIdItem->one_signal_player_id,
                        $request->title,
                        $request->description,
                        'Dashboard Notification',
                        $imagePath,
                        $id = null
                    );
                }
                onesignalhelper::StoreNotificationDetails($restIdItem->id, 'Notification', $request->title, $imagePath);
            }
        }

        DB::commit();
        return jsonResponseWithSuccessMessage(__('success.save_data'));
    } catch (Exception $e) {
        DB::rollBack();
        Log::error("Notification send Failed " . $e->getMessage());
        return jsonResponseWithErrorMessage(__('auth.something_went_wrong'), 500);
    }
}



    /**
     * Created By : Sayli Raut
     * Created at : 10 June 2024
     * Use : To view notification details.s
     */
    public function view($id)
    {
        $notification = NotificationDetails::with('notification')->findOrFail($id);
        return view('Admin.pages.manage_notification.manage_notifications_view', compact('notification'));
    }
}
