<?php

class OrdensFuncionarios
{
    private $db;

    public function __construct()
    {
        $this->db = new Database();
    }

    public function lerOrdensFuncionarios()
    {
        $this->db->query("
            SELECT of.*, 
                   o.numero as numero_ordem, 
                   p.nome as nome_funcionario, 
                   f.matricula as matricula_funcionario
            FROM ordens_funcionarios of
            LEFT JOIN ordens o ON of.id_ordem = o.id_ordem
            LEFT JOIN funcionarios f ON of.id_funcionario = f.id_funcionario
            LEFT JOIN pessoas p ON f.id_pessoa = p.id_pessoa
            WHERE of.removido IS NULL
            ORDER BY of.criado_em DESC
        ");
        return $this->db->resultados();
    }

    public function lerOrdemFuncionarioPorId($id)
    {
        $this->db->query("
            SELECT of.*, 
                   o.numero as numero_ordem, 
                   p.nome as nome_funcionario, 
                   f.matricula as matricula_funcionario
            FROM ordens_funcionarios of
            LEFT JOIN ordens o ON of.id_ordem = o.id_ordem
            LEFT JOIN funcionarios f ON of.id_funcionario = f.id_funcionario
            LEFT JOIN pessoas p ON f.id_pessoa = p.id_pessoa
            WHERE of.id_ordens_funcionarios = :id AND of.removido IS NULL
        ");
        $this->db->bind("id", $id);
        return $this->db->resultado();
    }

    public function armazenar($dados)
    {
        $this->db->query("
            INSERT INTO ordens_funcionarios 
                (id_ordem, id_funcionario, tipo_ordem, id_usuario)
            VALUES 
                (:id_ordem, :id_funcionario, :tipo_ordem, :id_usuario)
        ");
        foreach ($dados as $campo => $valor) {
            $this->db->bind($campo, $valor);
        }
        return $this->db->executa();
    }

    public function atualizar($dados)
    {
        $this->db->query("
            UPDATE ordens_funcionarios SET
                id_ordem = :id_ordem,
                id_funcionario = :id_funcionario,
                tipo_ordem = :tipo_ordem,
                alterado = NOW()
            WHERE id_ordens_funcionarios = :id_ordens_funcionarios
        ");
        foreach ($dados as $campo => $valor) {
            $this->db->bind($campo, $valor);
        }
        return $this->db->executa();
    }

    public function remover($id)
    {
        $this->db->query("UPDATE ordens_funcionarios SET removido = NOW() WHERE id_ordens_funcionarios = :id");
        $this->db->bind("id", $id);
        return $this->db->executa();
    }

    // Utilitários para selects
    public function lerOrdens()
    {
        $this->db->query("SELECT id_ordem, numero FROM ordens WHERE removido IS NULL ORDER BY numero DESC");
        return $this->db->resultados();
    }

    public function lerFuncionarios()
    {
        $this->db->query("
            SELECT f.id_funcionario, f.matricula, p.nome 
            FROM funcionarios f
            INNER JOIN pessoas p ON f.id_pessoa = p.id_pessoa
            WHERE f.removido IS NULL
            ORDER BY p.nome
        ");
        return $this->db->resultados();
    }
}
