<?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));
    }

    
}