<?php
require __DIR__.'/../vendor/autoload.php';

use nulib\cl;
use nulib\db\Capacitor;
use nulib\db\CapacitorChannel;
use nulib\db\mysql\Mysql;
use nulib\db\mysql\MysqlStorage;
use nulib\output\msg;
use nulib\output\std\StdMessenger;

msg::set_messenger_class(StdMessenger::class);

$db = new Mysql([
  "type" => "mysql",
  "name" => "mysql:host=mysql.devel.self;dbname=jclain;charset=utf8",
  "user" => "jclain",
]);

class MyChannel extends CapacitorChannel {
  const TABLE_NAME = "my";
  const COLUMN_DEFINITIONS = [
    "name" => "varchar(64) not null",
    "age" => "integer",
    "num" => ["integer"],
  ];

  function getItemValues($item): ?array {
    $item = cl::with($item);
    return [
      "name" => cl::first($item),
      "age" => $item["age"] ?? null,
      "num" => rand(),
    ];
  }
}

new Capacitor(new MysqlStorage($db), $channel = new MyChannel());

$channel->charge("hello world");
$channel->charge(["bonjour monde"]);
$channel->charge(["gutten tag", "age" => 15]);