<?php

namespace DetailTask;

use LogHelper;
use NeoBosClient;

/**
 * @property NeoBosClient $client
 */
class KemdikbudBosTask extends AbstractTask {
    #region Attributes
    private $arrayOfJenisSalur;
    private $objectProcessed;
    #endregion

    #region Main
    public function init()
    {
        $this->client = new NeoBosClient($this->config["neo_bos_prop"]);
        $this->client->setLogger($this->logger);
        $this->arrayOfJenisSalur = ["BOS", "BOP_PAUD", "BOP_KESETARAAN"];
        $this->objectProcessed = 0;
    }

    /**
     * @param $year
     * @return void
     * Logging disimpan ke table api_errors
     */
    public function processPenerimaBos($year = null) {
        $this->init();
        $startTime = microtime(true);
        $year = $year ?? date('Y') + 1;
        foreach ($this->arrayOfJenisSalur as $jenisSalur) {
            try {
                $this->client->processGetSekolahAll($year, $jenisSalur);
                LogHelper::logInfo(
                    "Process Kemdikbud BOS Penerima BOS: " . $jenisSalur,
                    $this->client->getStartTime(),
                    microtime(true),
                    [
                        "_object_processed" => $this->client->getObjectsProcessed()
                    ],
                    self::LOG_TYPE,
                    $this->logger
                );
            } catch (\Exception $e) {
                LogHelper::logInfo(
                    "Process Kemdikbud BOS Penerima BOS: " . $jenisSalur . " ended with exception",
                    $this->client->getStartTime(),
                    microtime(true),
                    [
                        "_message" => $e->getMessage(),
                        "_object_processed" => $this->client->getObjectsProcessed()
                    ],
                    self::LOG_TYPE,
                    $this->logger
                );
            } finally {
                $this->objectProcessed += $this->client->getObjectsProcessed();
            }
        }
        LogHelper::logInfo(
            "Process Kemdikbud BOS Penerima BOS",
            $startTime,
            microtime(true),
            [
                "_total_object_processed" => $this->objectProcessed
            ],
            self::LOG_TYPE,
            $this->logger
        );
    }
    #endregion
}
