<?php

defined('BASEPATH') or exit('No direct script access allowed');



class Ajax extends MY_Controller

{

    public function __construct()

    {

        parent::__construct();



        if(!$this->session->logged)

        {

            show_404();

        }

    }



    public function messages_status()

    {

		if ($this->session->logged) 

		{

			$this->db->query('UPDATE users SET last_activity_date = ' . now() . ' WHERE id = ' . $this->session->id . ' ');

		}

			

    	$output = array();



        $output['caching'] = false;



        if (!$this->cache->redis->get('auto_messages'))

        {

		    $messages = Ygg::get_automatic_messages();

            $this->cache->redis->save('auto_messages', $messages, 900);

        }

    	else

        {

            $messages = $this->cache->redis->get('auto_messages');

            $output['caching'] = true;

        }



    	$session_status = $this->session->status_auto_messages;

   		$session_status = json_decode($session_status, JSON_OBJECT_AS_ARRAY);

   		$notifications  = 0;



    	foreach($messages as $message)

    	{

    		$output['messages'][$message->id]['message_name'] = $message->name;

    		$output['messages'][$message->id]['message_type'] = $message->type;

            $output['messages'][$message->id]['last_readed'] = $session_status[$key];   

            $output['messages'][$message->id]['ascent'] = false;    



            $key = 'message_'.$message->id;



            // Si le message automatique est périodique

    		if($message->type == 1)

    		{

                // Récupération de la date de renouvellement

				$ascent = Ygg::get_ascent_timetamp($message->periodicity);



				$output['messages'][$message->id]['ascent'] = $ascent; 

    		}

            // Check condition périodique

            if($message->type == 1 && $message->instant_publish == 0 && (date('z-Y', $ascent) == date('z-Y', time()) && $ascent > time() || $message->publish_date > $ascent)) 

            {

                $output['messages'][$message->id]['status'] = 'not_yet_published';  

            }

            else 

            {

    			if(array_key_exists($key, $session_status) && $session_status[$key] == 'deleted')

    			{

    				$output['messages'][$message->id]['ascent'] = true;	

    				$output['messages'][$message->id]['deleted'] = true;	

    			}

                // On check si un message périodique a déjà été lu ou pas

        		else if(array_key_exists($key, $session_status) && $session_status[$key] > $message->publish_date)

        		{

        			if($message->type == 1 && time() > $ascent && $session_status[$key] < $ascent)

        			{

    					$output['messages'][$message->id]['is_readed'] = false;	

    					$output['messages'][$message->id]['ascent'] = true;	

    	    			$notifications++;

        			}

        			else

        			{

        				$output['messages'][$message->id]['is_readed'] = true;	

        			}

        		}

        		else 

        		{

    				$output['messages'][$message->id]['is_readed'] = false;	

        			$notifications++;

        		}

            }

    	}



    	$output['notifications'] = array(

    		'messages_unread_count' => $notifications + $this->session->unread_pm

    	);



    	$this->output->set_content_type('application/json')->set_output(json_encode($output));

    }



    

}