<?php

/*
 * This file is part of RaspiSMS.
 *
 * (c) Pierre-Lin Bonnemaison <plebwebsas@gmail.com>
 *
 * This source file is subject to the GPL-3.0 license that is bundled
 * with this source code in the file LICENSE.
 */

namespace controllers\internals;

/**
 * Classe des receivedes.
 */
class Received extends \descartes\InternalController
{
    private $model_received;

    public function __construct(\PDO $bdd)
    {
        $this->model_received = new \models\Received($bdd);
    }

    /**
     * Cette fonction retourne une liste des receivedes sous forme d'un tableau.
     *
     * @param mixed(int|bool) $nb_entry : Le nombre d'entrées à retourner par page
     * @param mixed(int|bool) $page     : Le numéro de page en cours
     *
     * @return array : La liste des receivedes
     */
    public function list($nb_entry = null, $page = null)
    {
        //Recupération des receivedes
        return $this->model_received->list($nb_entry, $nb_entry * $page);
    }

    /**
     * Cette fonction retourne une liste des receivedes sous forme d'un tableau.
     *
     * @param array int $ids : Les ids des entrées à retourner
     *
     * @return array : La liste des receivedes
     */
    public function gets($ids)
    {
        //Recupération des receivedes
        return $this->model_received->gets($ids);
    }

    /**
     * Cette fonction retourne les X dernières entrées triées par date.
     *
     * @param mixed false|int $nb_entry : Nombre d'entrée à retourner ou faux pour tout
     *
     * @return array : Les dernières entrées
     */
    public function get_lasts_by_date($nb_entry = false)
    {
        return $this->model_received->get_lasts_by_date($nb_entry);
    }

    /**
     * Cette fonction retourne une liste des receiveds sous forme d'un tableau.
     *
     * @param string $origin : Le numéro depuis lequel est envoyé le message
     *
     * @return array : La liste des receiveds
     */
    public function get_by_origin($origin)
    {
        return $this->model_received->get_by_origin($origin);
    }

    /**
     * Récupère les Sms reçus depuis une date.
     *
     * @param $date : La date depuis laquelle on veux les Sms (au format 2014-10-25 20:10:05)
     *
     * @return array : Tableau avec tous les Sms depuis la date
     */
    public function get_since_by_date($date)
    {
        return $this->model_received->get_since_by_date($date);
    }

    /**
     * Récupère les Sms reçus depuis une date pour un numero.
     *
     * @param $date : La date depuis laquelle on veux les Sms (au format 2014-10-25 20:10:05)
     * @param $number : Le numéro
     *
     * @return array : Tableau avec tous les Sms depuis la date
     */
    public function get_since_for_number_by_date($date, $number)
    {
        return $this->model_received->get_since_for_number_by_date($date, $number);
    }

    /**
     * Cette fonction va supprimer une liste de receiveds.
     *
     * @param array $ids : Les id des receivedes à supprimer
     * @param mixed $id
     *
     * @return int : Le nombre de receivedes supprimées;
     */
    public function delete($id)
    {
        return $this->model_received->delete($id);
    }

    /**
     * Cette fonction insert une nouvelle receivede.
     *
     * @param array $received : Un tableau représentant la receivede à insérer
     * @param mixed $at
     * @param mixed $origin
     * @param mixed $content
     * @param mixed $command
     *
     * @return mixed bool|int : false si echec, sinon l'id de la nouvelle receivede insérée
     */
    public function create($at, $origin, $content, $command)
    {
        $received = [
            'at' => $at,
            'origin' => $origin,
            'content' => $content,
            'command' => $command,
        ];

        return $this->model_received->create($received);
    }

    /**
     * Cette fonction met à jour une série de receivedes.
     *
     * @param mixed $id
     * @param mixed $at
     * @param mixed $origin
     * @param mixed $content
     * @param mixed $command
     *
     * @return int : le nombre de ligne modifiées
     */
    public function update($id, $at, $origin, $content, $command)
    {
        $received = [
            'at' => $at,
            'origin' => $origin,
            'content' => $content,
            'command' => $command,
        ];

        return $this->model_received->update($id, $received);
    }

    /**
     * Cette fonction permet de compter le nombre de receiveds.
     *
     * @return int : Le nombre d'entrées dans la table
     */
    public function count()
    {
        return $this->model_received->count();
    }

    /**
     * Cette fonction compte le nombre de receiveds par jour depuis une date.
     *
     * @param mixed $date
     *
     * @return array : un tableau avec en clef la date et en valeure le nombre de sms envoyés
     */
    public function count_by_day_since($date)
    {
        $counts_by_day = $this->model_received->count_by_day_since($date);
        $return = [];

        foreach ($counts_by_day as $count_by_day)
        {
            $return[$count_by_day['at_ymd']] = $count_by_day['nb'];
        }

        return $return;
    }

    /**
     * Cette fonction retourne les discussions avec un numéro.
     *
     * @return array : Un tableau avec la date de l'échange et le numéro de la personne
     */
    public function get_discussions()
    {
        return $this->model_received->get_discussions();
    }
}