<?php
require dirname(__FILE__).DIRECTORY_SEPARATOR.'../../../_vendors/firebase/autoload.php';

use Kreait\Firebase\Factory;
use Kreait\Firebase\ServiceAccount;

class Firebase {

  protected $firebase;
  protected $database_default;
  //protected $database;
  protected $clube_sub;

  private $ref;

  public function __construct(){}

  // Inicia conexão com firebase
  public function init($account=GLOBAL_GID_FBS_ACCOUNT){
    $acc = ServiceAccount::fromArray($account);
    $this->firebase = (new Factory)->withServiceAccount($acc)->create();
    return $this;
  }

  // Seta como referencia, o nó do clube
  public function setNoPrincipal($clube_sub){
    $this->clube_sub = $clube_sub;
    $this->ref = $this->firebase->getDatabase()->getReference($this->clube_sub);
    return $this;
  }

  // Define a referencia principal (primeiro nó dentro do clube)
  public function defChild($ref=null){
    $this->ref = $ref ? $this->ref->getChild($ref) : $this->ref;
    return $this;
  }

  // Realiza alteração no Firebase
  public function run($destino=null, $dados=null, $insert_zcod=true, $set=false){
    if($dados && is_array($dados)){
      // Reinicia ref para o nó principal
      $this->ref_run = $this->ref;
      // Leva até o nó de destino
      if($destino){
        if(is_array($destino)){
          foreach ($destino as $l){ $this->ref_run = $this->ref_run->getChild($l); }
        }else{
          $this->ref_run = $this->ref_run->getChild($destino);
        }
      }
      // Insere código de controle (para atualizar o nó)
      if($insert_zcod){ $dados['zcod'] = date('YmdHis'); }
      // Atualiza os dados
      if($set){$this->ref_run->set($dados);}
      else{$this->ref_run->update($dados);}
    }
  }

  public function remove(){
    return $this->ref->remove();
  }


  /*
  public function __construct()
  {
    // Assign the CodeIgniter super-object
    $this->CI =& get_instance();
    $this->serviceAccount = ServiceAccount::fromArray(GLOBAL_GID_FBS_ACCOUNT);
    $firebase = (new Factory)->withServiceAccount($this->serviceAccount)->create();
    $this->database = $firebase->getDatabase()->getReference($this->dbname);
  }

  public function get(){
      return $this->database->getChild("teste")->getValue();
  }

  public function insert(){
      return $this->database->getChild("outro-teste")->set("4875");
  }

  public function remove(){
      return $this->database->getChild("teste")->remove();
  }

  public function update(){
      return $this->database->getChild("outro-teste")->update(array("123"=>"alo alo"));
  }
  */
}