<?php
// This file is part of the Studyplan plugin for Moodle
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle.  If not, see <https://www.gnu.org/licenses/>.
/**
 * Ease of debugging tools
 * @package    local_treestudyplan
 * @copyright  2023 P.M. Kuipers
 * @license    https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
namespace local_treestudyplan;

use JsonException;

/**
 * Crude tool to aid in debugging
 */
class debug {
    /**
     * Dump an object in json format to debug log
     * @param mixed $object Object to dump
     * @param string $filename File to write to
     * @return any The object
     */
    public static function &dump(&$object, $filename="/tmp/debug.log") {

        try {
            $f = fopen($filename, "a+");
            try {
                $json = \json_encode($object, JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR );
                fwrite($f, $json."\n");
            } catch (JsonException $x) {
                fwrite($f, "Error processing json: ". $x->getMessage()."\n");
            }
        } catch (\Exception $x) {
            $f = null;

        } finally {
            fclose($f);
        }
        return $object;
    }

    /**
     * Write text to debug log file
     * @param string $text Text to write
     * @param string $filename File to write to
     * @return any The object
     */
    public static function write($text, $filename="/tmp/debug.log") {
        try {
            $f = fopen($filename, "a+");
            fwrite($f, $text."\n");
        } catch (\Exception $x) {
            $f = null;
        } finally {
            fclose($f);
        }
    }

}
