<?php

namespace Dao;
use Conn\MySqlConnect;

/**
 * Description of Noticias
 *
 * @author Délio
 */
class Noticias {
    
    public $id;
    public $data;
    public $titulo;
    public $subtitulo;
    public $texto;
    public $image;
    public $data_cadastro;
    public $usuario_cadastrou;
    public $data_alteracao;
    public $usuario_alterou;
    public $status;
    public $slug;
    public $fk_id_categoria;

    function __construct($res = null) {
        $this->id = (int) 0;
        $this->data = (string) date('Y-m-d H:i:s');
        $this->titulo = (string) '';
        $this->subtitulo = (string) '';
        $this->texto = (string) '';
        $this->image = (string) '';
        $this->data_cadastro = (string) date('Y-m-d H:i:s');
        $this->usuario_cadastrou = (int) 0;
        $this->data_alteracao = (string) date('Y-m-d H:i:s');
        $this->usuario_alterou = (int) 0;
        $this->status = (string) 'A';
        $this->slug = (string) '';
        $this->fk_id_categoria = (int) 0;
        $this->fill($res);
    }
    
    private function fill($res) {
        if ($res != null && $res instanceof \stdClass) {
            $this->id = (int) (isset($res->id) ? $res->id : 0);
            $this->data = (string) (isset($res->data) ? $res->data : date('Y-m-d H:i:s'));
            $this->titulo = (string) (isset($res->titulo) ? $res->titulo : '');
            $this->subtitulo = (string) (isset($res->subtitulo) ? $res->subtitulo : '');
            $this->texto = (string) (isset($res->texto) ? $res->texto : '');
            $this->image = (string) (isset($res->image) ? $res->image : '');
            $this->data_cadastro = (string) (isset($res->data_cadastro) ? $res->data_cadastro : null);
            $this->usuario_cadastrou = (int) (isset($res->usuario_cadastrou) ? $res->usuario_cadastrou : 0);
            $this->data_alteracao = (string) (isset($res->data_alteracao) ? $res->data_alteracao : null);
            $this->usuario_alterou = (int) (isset($res->usuario_alterou) ? $res->usuario_alterou : 0);
            $this->status = (string) (isset($res->status) ? $res->status : 'A');
            $this->slug = (string) (isset($res->slug) ? $res->slug : '');
            $this->fk_id_categoria = (int) (isset($res->fk_id_categoria) ? $res->fk_id_categoria : 0);
        }
    }

    private function inserir(MySqlConnect $conecta) {
        $sql = $conecta->prepare("INSERT INTO noticias (data, titulo, subtitulo, texto, image, data_cadastro, usuario_cadastrou, status, slug, fk_id_categoria) "
                . "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)") or die($conecta->error);
        $sql->bind_param("ssssssissi", $this->data, $this->titulo, $this->subtitulo, $this->texto, $this->image, $this->data_cadastro, $this->usuario_cadastrou, 
                $this->status, $this->slug, $this->fk_id_categoria);
        if ($sql->execute())
            return json_encode(['data' => 'Success', 'message' => 'Noticia inserida com sucesso!', 'id' => $sql->insert_id]);
        return json_encode(['data' => 'Error', 'message' => $sql->error, 'id' => 0]);
    }
    
    private function editar(MySqlConnect $conecta) {
        $sql = $conecta->prepare("UPDATE noticias SET data = ?, titulo = ?, subtitulo = ?, texto = ?, image = ?, data_alteracao = ?, usuario_alterou = ?, "
                . "slug = ?, fk_id_categoria = ? WHERE id = ?") or die($conecta->error);
        $sql->bind_param("ssssssisii", $this->data, $this->titulo, $this->subtitulo, $this->texto, $this->image, $this->data_alteracao, $this->usuario_alterou, 
                $this->slug, $this->fk_id_categoria, $this->id);
        if ($sql->execute())
            return json_encode(['data' => 'Success', 'message' => 'Noticia atualizada com sucesso!', 'id' => $this->id]);
        return json_encode(['data' => 'Error', 'message' => $sql->error, 'id' => $this->id]);
    }
    
    function salvar(MySqlConnect $conecta) {
        if ($this->id == 0)
            return $this->inserir($conecta);
        return $this->editar($conecta);
    }
    
    function excluir(MySqlConnect $conecta) {
        $sql = $conecta->prepare("UPDATE noticias SET data_alteracao = ?, usuario_alterou = ?, status = ? WHERE id = ?") or die($conecta->error);
        $sql->bind_param("sisi", $this->data_alteracao, $this->usuario_alterou, $this->status, $this->id);
        if ($sql->execute())
            return json_encode(['data' => 'Success', 'message' => 'Noticia excluida com sucesso!', 'id' => $this->id]);
        return json_encode(['data' => 'Error', 'message' => $sql->error, 'id' => $this->id]);
    }
    
    function getLista(MySqlConnect $conecta, $where = '') {
        $lst_noticias = [];
        $sql = $conecta->query("SELECT * FROM noticias WHERE status = 'A' $where") or die($conecta->error);
        while ($res = $sql->fetch_object())
            $lst_noticias[] = new Noticias($res);
        return $lst_noticias;
    }
    
    function getNoticiaPorId(MySqlConnect $conecta, $id) {
        $sql = $conecta->query("SELECT * FROM noticias WHERE id = '$id' AND status = 'A'") or die($conecta->error);
        if ($sql->num_rows > 0) {
            $res = $sql->fetch_object();
            $this->fill($res);
        }
    }
    
    function getNoticiaPorDataSlug(MySqlConnect $conecta, $data, $slug) {
        $sql = $conecta->query("SELECT id FROM noticias WHERE data = '$data' AND slug = '$slug' AND status = 'A'") or die($conecta->error);
        if ($sql->num_rows > 0) {
            $res = $sql->fetch_object();
            $this->getNoticiaPorId($conecta, $res->id);
        }
    }
}