<?php
class Origem {
    private $conn;
    private $table_name = "origens";

    public $id;
    public $nome;
    public $tenant_id;

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

    // Criar uma nova origem
    public function create() {
        $query = "INSERT INTO " . $this->table_name . " 
                 (nome, tenant_id) 
                  VALUES 
                 (:nome, :tenant_id)";

        $stmt = $this->conn->prepare($query);

        // Limpar e vincular os parâmetros
        $this->nome = htmlspecialchars(strip_tags($this->nome));
        $this->tenant_id = htmlspecialchars(strip_tags($this->tenant_id));

        $stmt->bindParam(":nome", $this->nome);
        $stmt->bindParam(":tenant_id", $this->tenant_id);

        if ($stmt->execute()) {
            return true;
        }
        return false;
    }

    // Ler todas as origens de um tenant
    public function read($tenant_id) {
        $query = "SELECT id, nome 
                  FROM " . $this->table_name . " 
                  WHERE tenant_id = :tenant_id 
                  ORDER BY nome";

        $stmt = $this->conn->prepare($query);
        $stmt->bindParam(":tenant_id", $tenant_id);
        $stmt->execute();

        return $stmt;
    }

    // Ler uma única origem por ID
    public function readOne() {
        $query = "SELECT nome, tenant_id 
                  FROM " . $this->table_name . " 
                  WHERE id = ? 
                  LIMIT 0,1";

        $stmt = $this->conn->prepare($query);
        $stmt->bindParam(1, $this->id);
        $stmt->execute();

        $row = $stmt->fetch(PDO::FETCH_ASSOC);

        if ($row) {
            $this->nome = $row['nome'];
            $this->tenant_id = $row['tenant_id'];
        }
    }

    // Atualizar uma origem
    public function update() {
        $query = "UPDATE " . $this->table_name . " 
                  SET 
                      nome = :nome 
                  WHERE 
                      id = :id AND 
                      tenant_id = :tenant_id";

        $stmt = $this->conn->prepare($query);

        // Limpar e vincular os parâmetros
        $this->nome = htmlspecialchars(strip_tags($this->nome));
        $this->id = htmlspecialchars(strip_tags($this->id));
        $this->tenant_id = htmlspecialchars(strip_tags($this->tenant_id));

        $stmt->bindParam(":nome", $this->nome);
        $stmt->bindParam(":id", $this->id);
        $stmt->bindParam(":tenant_id", $this->tenant_id);

        if ($stmt->execute()) {
            return true;
        }
        return false;
    }

    // Deletar uma origem
    public function delete() {
        $query = "DELETE FROM " . $this->table_name . " 
                  WHERE id = ? AND tenant_id = ?";

        $stmt = $this->conn->prepare($query);

        $this->id = htmlspecialchars(strip_tags($this->id));
        $this->tenant_id = htmlspecialchars(strip_tags($this->tenant_id));

        $stmt->bindParam(1, $this->id);
        $stmt->bindParam(2, $this->tenant_id);

        if ($stmt->execute()) {
            return true;
        }
        return false;
    }

    // Verificar se o nome da origem já existe para um tenant
    public function nomeExists() {
        $query = "SELECT id 
                  FROM " . $this->table_name . " 
                  WHERE nome = ? AND tenant_id = ? 
                  LIMIT 0,1";

        $stmt = $this->conn->prepare($query);

        $this->nome = htmlspecialchars(strip_tags($this->nome));
        $this->tenant_id = htmlspecialchars(strip_tags($this->tenant_id));

        $stmt->bindParam(1, $this->nome);
        $stmt->bindParam(2, $this->tenant_id);

        $stmt->execute();

        if ($stmt->rowCount() > 0) {
            return true;
        }
        return false;
    }
}
?>