<?php

class Funcionario
{
    private $db;

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

    // Retorna todos os funcionários não removidos, trazendo o nome do cargo/função
    public function listarTodos()
{
    $this->db->query("
        SELECT 
            f.*, 
            p.nome AS nome_pessoa, 
            p.cpf, 
            fu.descricao AS cargo,
            d.nome_departamento
        FROM funcionarios f
        INNER JOIN pessoas p ON f.id_pessoa = p.id_pessoa
        INNER JOIN funcoes fu ON fu.id_funcao = f.id_funcoes
        LEFT JOIN departamentos d ON f.id_departamento = d.id_departamento
        WHERE f.removido IS NULL
        ORDER BY p.nome
    ");
    return $this->db->resultados();
}


    // Alias para compatibilidade
    public function lerFuncionarios()
    {
        return $this->listarTodos();
    }
public function listarFuncoes()
{
    $this->db->query("SELECT * FROM funcoes WHERE removido IS NULL");
    return $this->db->resultados();
}




    // Busca um funcionário pelo ID (inclui nome do cargo/função)
    public function lerFuncionarioPorId($id)
{
    $this->db->query("
        SELECT 
            f.*, 
            p.nome AS nome_pessoa, 
            p.cpf, 
            fu.descricao AS cargo,
            d.nome_departamento AS nome_departamento

        FROM funcionarios f
        INNER JOIN pessoas p ON f.id_pessoa = p.id_pessoa
        INNER JOIN funcoes fu ON fu.id_funcao = f.id_funcoes
        LEFT JOIN departamentos d ON f.id_departamento = d.id_departamento
        WHERE f.id_funcionario = :id_funcionario AND f.removido IS NULL
        LIMIT 1
    ");
    $this->db->bind("id_funcionario", $id);
    return $this->db->resultado();
}


    // Insere um novo funcionário
    public function armazenar($dados)
    {
        $this->db->query("
            INSERT INTO funcionarios (
                id_pessoa, matricula, admissao, pis, salario, horas, estagio_probatorio, regime, id_departamento, id_funcoes, criado_em, id_usuario
            ) VALUES (
                :id_pessoa, :matricula, :admissao, :pis, :salario, :horas, :estagio_probatorio, :regime, :id_departamento, :id_funcoes, NOW(), :id_usuario
            )
        ");
        $this->db->bind("id_pessoa", $dados['id_pessoa']);
        $this->db->bind("matricula", $dados['matricula']);
        $this->db->bind("admissao", $dados['admissao']);
        $this->db->bind("pis", $dados['pis']);
        $this->db->bind("salario", $dados['salario']);
        $this->db->bind("horas", $dados['horas']);
        $this->db->bind("estagio_probatorio", $dados['estagio_probatorio']);
        $this->db->bind("regime", $dados['regime']);
        $this->db->bind("id_departamento", $dados['id_departamento']);
        $this->db->bind("id_funcoes", $dados['id_funcoes']);
        $this->db->bind("id_usuario", $dados['id_usuario']);
        return $this->db->executa();
    }

    // Atualiza um funcionário existente
    public function atualizar($dados)
    {
        $this->db->query("
            UPDATE funcionarios SET
                id_pessoa = :id_pessoa,
                matricula = :matricula,
                admissao = :admissao,
                pis = :pis,
                salario = :salario,
                horas = :horas,
                estagio_probatorio = :estagio_probatorio,
                regime = :regime,
                id_departamento = :id_departamento,
                id_funcoes = :id_funcoes,
                alterado = NOW()
            WHERE id_funcionario = :id_funcionario
        ");
        $this->db->bind("id_pessoa", $dados['id_pessoa']);
        $this->db->bind("matricula", $dados['matricula']);
        $this->db->bind("admissao", $dados['admissao']);
        $this->db->bind("pis", $dados['pis']);
        $this->db->bind("salario", $dados['salario']);
        $this->db->bind("horas", $dados['horas']);
        $this->db->bind("estagio_probatorio", $dados['estagio_probatorio']);
        $this->db->bind("regime", $dados['regime']);
        $this->db->bind("id_departamento", $dados['id_departamento']);
        $this->db->bind("id_funcoes", $dados['id_funcoes']);
        $this->db->bind("id_funcionario", $dados['id_funcionario']);
        return $this->db->executa();
    }

    // Marca funcionário como removido (soft delete)
    public function remover($id)
    {
        $this->db->query("UPDATE funcionarios SET removido = NOW() WHERE id_funcionario = :id_funcionario");
        $this->db->bind("id_funcionario", $id);
        return $this->db->executa();
    }

    // Pessoas que ainda não são funcionários (útil para cadastro)
    public function lerPessoasDisponiveis()
    {
        $this->db->query("
            SELECT * FROM pessoas
            WHERE id_pessoa NOT IN (SELECT id_pessoa FROM funcionarios WHERE removido IS NULL)
            AND removido IS NULL
            ORDER BY nome
        ");
        return $this->db->resultados();
    }

    // Retorna todos os funcionários de um departamento específico
    public function funcionariosPorDepartamento($id_departamento)
    {
        $this->db->query("
            SELECT 
                f.*, 
                p.nome AS nome_pessoa, 
                p.cpf, 
                fu.descricao AS cargo
            FROM funcionarios f
            INNER JOIN pessoas p ON f.id_pessoa = p.id_pessoa
            INNER JOIN funcoes fu ON fu.id_funcao = f.id_funcoes
            WHERE f.id_departamento = :id_departamento AND f.removido IS NULL
            ORDER BY p.nome
        ");
        $this->db->bind("id_departamento", $id_departamento);
        return $this->db->resultados();
    }

    
}
