<?php

class PessoasController extends Controller
{
    private $pessoaModel;
    private $escolaridadeModel;
    private $cidadeModel;
    private $estadoCivilModel;

    public function __construct()
    {
        if (!Sessao::estaLogado()) {
            URL::redirecionar('usuarios/login');
        }
        $this->pessoaModel = $this->model('Pessoa');
        $this->escolaridadeModel = $this->model('Escolaridade');
        $this->cidadeModel = $this->model('Cidade');
        $this->estadoCivilModel = $this->model('EstadoCivil');
    }

    public function index()
    {
        $dados = [
            'pessoas' => $this->pessoaModel->todas()
        ];
        $this->view('layout', [
            'conteudo' => __DIR__ . '/../Views/pessoas/index.php',
            'dados'    => $dados
        ]);
    }

    public function cadastrar()
    {
        $form = filter_input_array(INPUT_POST, FILTER_SANITIZE_SPECIAL_CHARS);
        
        if ($form) {

            error_log("Cidade recebida: " . $form['cidade']);
            $dados = [
                'nome'             => strtoupper(trim($form['nome'] ?? '')),
                'data_nascimento'  => $form['data_nascimento'] ?? null,
                'sexo'             => strtoupper(trim($form['sexo'] ?? '')),
                'cpf'              => $form['cpf'] ?? '',
                'rg'               => $form['rg'] ?? '',
                'orgao_emissor'    => strtoupper(trim($form['orgao_emissor'] ?? '')),
                'endereco'         => strtoupper(trim($form['endereco'] ?? '')),
                'bairro'           => strtoupper(trim($form['bairro'] ?? '')),
                'numero'           => $form['numero'] ?? null,
                'cep'              => $form['cep'] ?? '',
                'cidade'           => $form['cidade'] ?? null,
                'telefone_fixo'    => $form['telefone_fixo'] ?? '',
                'telefone_celular' => $form['telefone_celular'] ?? '',
                'email'            => strtolower($form['email'] ?? ''),
                'estado_civil'     => $form['id_estado_civil'] ?? null,
                'nome_pai'         => strtoupper(trim($form['nome_pai'] ?? '')),
                'nome_mae'         => strtoupper(trim($form['nome_mae'] ?? '')),
                'escolaridade'     => $form['id_escolaridade'] ?? null,
                'id_usuario'       => $_SESSION['usuario_id']
            ];
            if ($this->pessoaModel->inserir($dados)) {
                Sessao::mensagem('pessoa', 'Pessoa cadastrada com sucesso!');
                URL::redirecionar('pessoas');
            } else {
                Sessao::mensagem('pessoa', 'Erro ao cadastrar.', 'alert alert-danger');
            }
        }

        $dados = [
            'escolaridades' => $this->escolaridadeModel->lerEscolaridades(),
            'cidades'       => $this->cidadeModel->lerCidades(),
            'estados_civil' => $this->estadoCivilModel->lerEstadosCivis()
        ];

        $this->view('layout', [
            'conteudo' => __DIR__ . '/../Views/pessoas/cadastrar.php',
            'dados'    => $dados
        ]);
    }

    public function editar($id)
    {
        $form = filter_input_array(INPUT_POST, FILTER_SANITIZE_SPECIAL_CHARS);
        if ($form) {
            $dados = [
                'id_pessoa'        => $id,
                'nome'             => strtoupper(trim($form['nome'] ?? '')),
                'data_nascimento'  => $form['data_nascimento'] ?? null,
                'sexo'             => strtoupper(trim($form['sexo'] ?? '')),
                'cpf'              => $form['cpf'] ?? '',
                'rg'               => $form['rg'] ?? '',
                'orgao_emissor'    => strtoupper(trim($form['orgao_emissor'] ?? '')),
                'endereco'         => strtoupper(trim($form['endereco'] ?? '')),
                'bairro'           => strtoupper(trim($form['bairro'] ?? '')),
                'numero'           => $form['numero'] ?? null,
                'cep'              => $form['cep'] ?? '',
                'cidade'           => $form['cidade'] ?? null,
                'telefone_fixo'    => $form['telefone_fixo'] ?? '',
                'telefone_celular' => $form['telefone_celular'] ?? '',
                'email'            => strtolower($form['email'] ?? ''),
                'estado_civil'     => $form['id_estado_civil'] ?? null,
                'nome_pai'         => strtoupper(trim($form['nome_pai'] ?? '')),
                'nome_mae'         => strtoupper(trim($form['nome_mae'] ?? '')),
                'escolaridade'     => $form['id_escolaridade'] ?? null,
                'id_usuario'       => $_SESSION['usuario_id']
            ];
            if ($this->pessoaModel->atualizar($dados)) {
                Sessao::mensagem('pessoa', 'Pessoa atualizada com sucesso!');
                URL::redirecionar('pessoas');
            } else {
                Sessao::mensagem('pessoa', 'Erro ao atualizar.', 'alert alert-danger');
            }
        } else {
            $pessoa = $this->pessoaModel->porId($id);
            $dados = [
                'pessoa'        => $pessoa, // corrigido: não faz cast para array
                'escolaridades' => $this->escolaridadeModel->lerEscolaridades(),
                'cidades'       => $this->cidadeModel->lerCidades(),
                'estados_civil' => $this->estadoCivilModel->lerEstadosCivis()
            ];
            $this->view('layout', [
                'conteudo' => __DIR__ . '/../Views/pessoas/editar.php',
                'dados'    => $dados
            ]);
        }
    }

    public function deletar($id)
    {
        if ($this->pessoaModel->deletar($id, $_SESSION['usuario_id'])) {
            Sessao::mensagem('pessoa', 'Pessoa deletada com sucesso!');
        } else {
            Sessao::mensagem('pessoa', 'Erro ao deletar.', 'alert alert-danger');
        }
        URL::redirecionar('pessoas');
    }


public function cadastrarcpf() {
    // Recuperar dados do formulário
    $cpf = $_POST['cpf'];

    // Conectar ao banco de dados
    $conexao = mysqli_connect("localhost", "usuario", "senha", "banco_de_dados");
    if (!$conexao) {
        die("Conexão falhou: " . mysqli_connect_error());
    }

    // Consulta para verificar se o CPF já existe
    $query = "SELECT COUNT(*) FROM pessoas WHERE cpf = ?";
    $stmt = mysqli_prepare($conexao, $query);
    mysqli_stmt_bind_param($stmt, "s", $cpf); // "s" indica que o tipo de parâmetro é string
    mysqli_stmt_execute($stmt);
    mysqli_stmt_bind_result($stmt, $count);
    mysqli_stmt_fetch($stmt);

    // Se o CPF já existir
    if ($count > 0) {
        echo "Erro: Este CPF já está cadastrado.";
        mysqli_stmt_close($stmt);
        mysqli_close($conexao); 
        return;
    }

    // Se o CPF não existir, faz o insert normalmente
    $nome = $_POST['nome'];
    $data_nascimento = $_POST['data_nascimento'];
    $sexo = $_POST['sexo'];
    $rg = $_POST['rg'];
    $orgao_emissor = $_POST['orgao_emissor'];

    // Inserir no banco de dados
    $queryInsert = "INSERT INTO pessoas (nome, cpf, data_nascimento, sexo, rg, orgao_emissor) 
                    VALUES (?, ?, ?, ?, ?, ?)";
    $stmtInsert = mysqli_prepare($conexao, $queryInsert);
    mysqli_stmt_bind_param($stmtInsert, "ssssss", $nome, $cpf, $data_nascimento, $sexo, $rg, $orgao_emissor);

    if (mysqli_stmt_execute($stmtInsert)) {
        echo "Pessoa cadastrada com sucesso!";
    } else {
        echo "Erro ao cadastrar: " . mysqli_error($conexao);
    }

    // Fechar a conexão
    mysqli_stmt_close($stmtInsert);
    mysqli_stmt_close($stmt);
    mysqli_close($conexao);
}

public function visualizar($id)
{
    $pessoa = $this->pessoaModel->lerPessoaPorId($id);

    if (!$pessoa) {
        Sessao::mensagem('pessoas', 'Pessoa não encontrada.', 'alert alert-danger');
        URL::redirecionar('pessoas');
        return;
    }

    $dados = [
        'pessoa' => $pessoa
    ];

    $this->view('layout', [
        'conteudo' => __DIR__ . '/../Views/pessoas/visualizar.php',
        'dados' => $dados
    ]);
}



}
