<?php

class Passagem
{
    private $db;

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

    public function lerPassagens()
    {
        $this->db->query("
            SELECT p.*, 
                   o.numero as numero_ordem, 
                   tt.descricao as descricao_tipo_transporte,
                   co.nome as cidade_origem_nome,
                   cd.nome as cidade_destino_nome
            FROM passagens p
            LEFT JOIN ordens o ON p.id_ordem = o.id_ordem
            LEFT JOIN tipos_transporte tt ON p.id_transporte = tt.id_transporte
            LEFT JOIN cidades co ON p.id_cidade_origem = co.id_cidade
            LEFT JOIN cidades cd ON p.id_cidade_destino = cd.id_cidade
            WHERE p.removido IS NULL
            ORDER BY p.data_passagem DESC
        ");
        return $this->db->resultados();
    }

    public function lerPassagemPorId($id)
    {
        $this->db->query("
            SELECT p.*, 
                   o.numero as numero_ordem, 
                   tt.descricao as descricao_tipo_transporte,
                   co.nome as cidade_origem_nome,
                   cd.nome as cidade_destino_nome
            FROM passagens p
            LEFT JOIN ordens o ON p.id_ordem = o.id_ordem
            LEFT JOIN tipos_transporte tt ON p.id_transporte = tt.id_transporte
            LEFT JOIN cidades co ON p.id_cidade_origem = co.id_cidade
            LEFT JOIN cidades cd ON p.id_cidade_destino = cd.id_cidade
            WHERE p.id_passagem = :id AND p.removido IS NULL
        ");
        $this->db->bind("id", $id);
        return $this->db->resultado();
    }

    public function armazenar($dados)
    {
        $this->db->query("
            INSERT INTO passagens 
                (id_ordem, id_transporte, id_cidade_origem, id_cidade_destino, valor, data_passagem, id_usuario)
            VALUES 
                (:id_ordem, :id_transporte, :id_cidade_origem, :id_cidade_destino, :valor, :data_passagem, :id_usuario)
        ");
        foreach ($dados as $campo => $valor) {
            $this->db->bind($campo, $valor);
        }
        return $this->db->executa();
    }

    public function atualizar($dados)
    {
        $this->db->query("
            UPDATE passagens SET
                id_ordem          = :id_ordem,
                id_transporte     = :id_transporte,
                id_cidade_origem  = :id_cidade_origem,
                id_cidade_destino = :id_cidade_destino,
                valor             = :valor,
                data_passagem     = :data_passagem,
                alterado          = NOW()
            WHERE id_passagem = :id_passagem
        ");
        foreach ($dados as $campo => $valor) {
            $this->db->bind($campo, $valor);
        }
        return $this->db->executa();
    }

    public function remover($id)
    {
        $this->db->query("UPDATE passagens SET removido = NOW() WHERE id_passagem = :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 lerTiposTransporte()
    {
        $this->db->query("SELECT id_transporte, descricao FROM tipos_transporte WHERE removido IS NULL ORDER BY descricao");
        return $this->db->resultados();
    }

    public function lerCidades()
    {
        $this->db->query("SELECT id_cidade, nome FROM cidades WHERE removido IS NULL ORDER BY nome");
        return $this->db->resultados();
    }
}
