<?php

namespace App\Helpers;
use App\Models\Notification\Notification;
use Auth;

class NotificationClass {



    public function postnotification($notification_label,$detailed_text='',$notification_icon='',$user_type=NULL,$user_subtype=NULL,$user=NULL,$link_url='',$valid_from=NULL,$valid_to=NULL,$web_flag=NULL,$sms_flag=NULL,$email_flag=NULL)
    {
    	
    	$id = Auth::user()->id;

    	//insert into notifications table
    	$insert_id = Notification::create([
        'notification_label' => $notification_label,
        'detailed_text' => $detailed_text,
        'notification_icon' => $notification_icon,
        'user_type' => $user_type,
        'user_subtype' => $user_subtype,
        'user' => $user,
        'link_url' => $link_url,
        'valid_from' => $valid_from,
        'valid_to' => $valid_to,
        'web_flag' => $web_flag,
        'sms_flag' => $sms_flag,
        'email_flag' => $email_flag,
        'updated_by' => $id,

    ]);

    	if($insert_id)
    		return 1;
    	else
    		return 0;

    }

    public function viewnotification($user,$user_type=NULL,$user_subtype=NULL)
    {
    	 $current_date=date('Y-m-d');

    	if($user_type&&$user_subtype)
    	{
    		$notifications=Notification::where(function ($query) use($current_date) {
			    $query->where('valid_from', '<=', $current_date)
			          ->orWhereNull('valid_from');
			})->where(function ($query) use($current_date) {
			    $query->where('valid_to', '>=', $current_date)
			          ->orWhereNull('valid_to');
			})->where(function ($query) use($user_type) {
			    $query->where('user_type', $user_type)
			          ->orWhereNull('user_type');
			})->where(function ($query) use($user_subtype) {
			    $query->where('user_subtype', $user_subtype)
			          ->orWhereNull('user_subtype');
			})->where(function ($query) use($user) {
			    $query->where('user_id', $user)
			          ->orWhereNull('user_id');
			})->get();

    	}
    	else if($user_type&&!$user_subtype)
    	{
    		$notifications=Notification::where(function ($query) use($current_date) {
			    $query->where('valid_from', '<=', $current_date)
			          ->orWhereNull('valid_from');
			})->where(function ($query) use($current_date) {
			    $query->where('valid_to', '>=', $current_date)
			          ->orWhereNull('valid_to');
			})->where(function ($query) use($user_type) {
			    $query->where('user_type', $user_type)
			          ->orWhereNull('user_type');
			})->where(function ($query) use($user) {
			    $query->where('user_id', $user)
			          ->orWhereNull('user_id');
			})->get();
    	}
    	else if(!$user_type&&$user_subtype)
    	{
    		$notifications=Notification::where(function ($query) use($current_date) {
			    $query->where('valid_from', '<=', $current_date)
			          ->orWhereNull('valid_from');
			})->where(function ($query) use($current_date) {
			    $query->where('valid_to', '>=', $current_date)
			          ->orWhereNull('valid_to');
			})->where(function ($query) use($user_subtype) {
			    $query->where('user_subtype', $user_subtype)
			          ->orWhereNull('user_subtype');
			})->where(function ($query) use($user) {
			    $query->where('user_id', $user)
			          ->orWhereNull('user_id');
			})->get();
    	}
    	else
    	{
    		$notifications=Notification::where('user_id',$user)->where(function ($query) use($current_date) {
			    $query->where('valid_from', '<=', $current_date)
			          ->orWhereNull('valid_from');
			})->where(function ($query) use($current_date) {
			    $query->where('valid_to', '>=', $current_date)
			          ->orWhereNull('valid_to');
			})->get();

    	}

    	return $notifications;
    }

    public function viewlastfivenotification($user,$user_type=NULL,$user_subtype=NULL)
    {
    	 $current_date=date('Y-m-d');

    	if($user_type&&$user_subtype)
    	{
    		$notifications=Notification::where(function ($query) use($current_date) {
			    $query->where('valid_from', '<=', $current_date)
			          ->orWhereNull('valid_from');
			})->where(function ($query) use($current_date) {
			    $query->where('valid_to', '>=', $current_date)
			          ->orWhereNull('valid_to');
			})->where(function ($query) use($user_type) {
			    $query->where('user_type', $user_type)
			          ->orWhereNull('user_type');
			})->where(function ($query) use($user_subtype) {
			    $query->where('user_subtype', $user_subtype)
			          ->orWhereNull('user_subtype');
			})->where(function ($query) use($user) {
			    $query->where('user_id', $user)
			          ->orWhereNull('user_id');
			})->limit(5)->get();

    	}
    	else if($user_type&&!$user_subtype)
    	{
    		$notifications=Notification::where(function ($query) use($current_date) {
			    $query->where('valid_from', '<=', $current_date)
			          ->orWhereNull('valid_from');
			})->where(function ($query) use($current_date) {
			    $query->where('valid_to', '>=', $current_date)
			          ->orWhereNull('valid_to');
			})->where(function ($query) use($user_type) {
			    $query->where('user_type', $user_type)
			          ->orWhereNull('user_type');
			})->where(function ($query) use($user) {
			    $query->where('user_id', $user)
			          ->orWhereNull('user_id');
			})->limit(5)->get();
    	}
    	else if(!$user_type&&$user_subtype)
    	{
    		$notifications=Notification::where(function ($query) use($current_date) {
			    $query->where('valid_from', '<=', $current_date)
			          ->orWhereNull('valid_from');
			})->where(function ($query) use($current_date) {
			    $query->where('valid_to', '>=', $current_date)
			          ->orWhereNull('valid_to');
			})->where(function ($query) use($user_subtype) {
			    $query->where('user_subtype', $user_subtype)
			          ->orWhereNull('user_subtype');
			})->where(function ($query) use($user) {
			    $query->where('user_id', $user)
			          ->orWhereNull('user_id');
			})->limit(5)->get();
    	}
    	else
    	{
    		$notifications=Notification::where('user_id',$user)->where(function ($query) use($current_date) {
			    $query->where('valid_from', '<=', $current_date)
			          ->orWhereNull('valid_from');
			})->where(function ($query) use($current_date) {
			    $query->where('valid_to', '>=', $current_date)
			          ->orWhereNull('valid_to');
			})->limit(5)->get();

    	}

    	return $notifications;
    }

    public function notificationcount($user,$user_type=NULL,$user_subtype=NULL)
    {

    		 $current_date=date('Y-m-d');

    	if($user_type&&$user_subtype)
    	{
    		$notifications=Notification::where(function ($query) use($current_date) {
			    $query->where('valid_from', '<=', $current_date)
			          ->orWhereNull('valid_from');
			})->where(function ($query) use($current_date) {
			    $query->where('valid_to', '>=', $current_date)
			          ->orWhereNull('valid_to');
			})->where(function ($query) use($user_type) {
			    $query->where('user_type', $user_type)
			          ->orWhereNull('user_type');
			})->where(function ($query) use($user_subtype) {
			    $query->where('user_subtype', $user_subtype)
			          ->orWhereNull('user_subtype');
			})->where(function ($query) use($user) {
			    $query->where('user_id', $user)
			          ->orWhereNull('user_id');
			})->count();

    	}
    	else if($user_type&&!$user_subtype)
    	{
    		$notifications=Notification::where(function ($query) use($current_date) {
			    $query->where('valid_from', '<=', $current_date)
			          ->orWhereNull('valid_from');
			})->where(function ($query) use($current_date) {
			    $query->where('valid_to', '>=', $current_date)
			          ->orWhereNull('valid_to');
			})->where(function ($query) use($user_type) {
			    $query->where('user_type', $user_type)
			          ->orWhereNull('user_type');
			})->where(function ($query) use($user) {
			    $query->where('user_id', $user)
			          ->orWhereNull('user_id');
			})->count();
    	}
    	else if(!$user_type&&$user_subtype)
    	{
    		$notifications=Notification::where(function ($query) use($current_date) {
			    $query->where('valid_from', '<=', $current_date)
			          ->orWhereNull('valid_from');
			})->where(function ($query) use($current_date) {
			    $query->where('valid_to', '>=', $current_date)
			          ->orWhereNull('valid_to');
			})->where(function ($query) use($user_subtype) {
			    $query->where('user_subtype', $user_subtype)
			          ->orWhereNull('user_subtype');
			})->where(function ($query) use($user) {
			    $query->where('user_id', $user)
			          ->orWhereNull('user_id');
			})->count();
    	}
    	else
    	{
    		$notifications=Notification::where('user_id',$user)->where(function ($query) use($current_date) {
			    $query->where('valid_from', '<=', $current_date)
			          ->orWhereNull('valid_from');
			})->where(function ($query) use($current_date) {
			    $query->where('valid_to', '>=', $current_date)
			          ->orWhereNull('valid_to');
			})->count();

    	}

    	return $notifications;

    }

}