<?php

namespace objects;

use classes\db;
use classes\edge_gateway_schema_bootstrap;
use classes\object_property;
use traits\db_object_t;

class edge_gateway_operation_events_o extends db
{
    use db_object_t;

    public object_property $operation_id;
    public object_property $gateway_id;
    public object_property $stage;
    public object_property $level;
    public object_property $code;
    public object_property $message;
    public object_property $context_json;
    public object_property $created_at;

    public function structure(): void
    {
        edge_gateway_schema_bootstrap::ensureTables();
        $this->setTable('edge_gateway_operation_events');
    }

    public function getObjectProperties(): void
    {
        $this->operation_id = new object_property($this->table, $this->id, 'operation_id', 'int', false);
        $this->gateway_id = new object_property($this->table, $this->id, 'gateway_id', 'int', false);
        $this->stage = new object_property($this->table, $this->id, 'stage', 'string', false);
        $this->level = new object_property($this->table, $this->id, 'level', 'string', false);
        $this->code = new object_property($this->table, $this->id, 'code', 'string', false);
        $this->message = new object_property($this->table, $this->id, 'message', 'text', false);
        $this->context_json = new object_property($this->table, $this->id, 'context_json', 'json', false);
        $this->created_at = new object_property($this->table, $this->id, 'created_at', 'timestamp', false);
    }

    public function objectChanged(): void
    {
    }

    public function asArray(): array
    {
        $this->requireSelected();

        return [
            'id' => (int)$this->id,
            'operation_id' => (int)$this->operation_id->value(),
            'gateway_id' => (int)$this->gateway_id->value(),
            'stage' => (string)$this->stage->value(),
            'level' => (string)$this->level->value(),
            'code' => $this->code->value() === null ? null : (string)$this->code->value(),
            'message' => (string)$this->message->value(),
            'context' => (array)($this->context_json->value() ?? []),
            'created_at' => (string)$this->created_at->value(),
        ];
    }
}
