<?php

use Jaga\Models\BaseModel;

/**
 * Class LogModeration
 * @property UmUser $moderator
 */
class LogModeration extends BaseModel
{
    public $id;
    public $action;
    public $action_menu;
    public $ref_table;
    public $ref_id;
    public $data_from;
    public $data_to;
    public $moderated_by;
    public $moderated_at;

    const ACTION_UPDATE_UMUSER          = "UPDATE";
    const ACTION_CHANGEPWD_UMUSER       = "CHANGEPWD";
    const ACTION_BAN_UMUSER             = "BAN";
    const ACTION_UNBAN_UMUSER           = "UNBAN";
    const ACTION_DELETE_UMUSER          = "DELETE";
    const ACTION_CHANGEEMAIL_UMUSER     = "CHANGEEMAIL";

    const ACTIONMENU_ADMINISTRASI_JAGA                  = "Administrasi JAGA";
    const ACTIONMENU_ADMINISTRASI_KORWIL                = "Monitoring Korwil";
    const ACTIONMENU_ADMINISTRASI_PAK                   = "Administrasi PAK";
    const ACTIONMENU_ADMINISTRASI_MONITORING            = "Administrasi Monitoring";
    const ACTIONMENU_ADMINISTRASI_PANCEK                = "Administrasi PanCek";
    const ACTIONMENU_ADMINISTRASI_PANCEK_USER_PANCEK    = "Administrasi PanCek Management User Pancek";
    const ACTIONMENU_PROFILE                            = "Profile";
    const ACTIONMENU_ADMINISTRASI_STRANAS               = "Administrasi Stranas";

    const ACTION_LABEL = [
        LogModeration::ACTION_UPDATE_UMUSER => "melakukan perubahan data user",
        LogModeration::ACTION_CHANGEPWD_UMUSER => "melakukan perubahan password user",
        LogModeration::ACTION_BAN_UMUSER => "melakukan ban terhadap user",
        LogModeration::ACTION_UNBAN_UMUSER => "melakukan unban terhadap user",
        LogModeration::ACTION_DELETE_UMUSER => "melakukan penghapusan terhadap user",
        LogModeration::ACTION_CHANGEEMAIL_UMUSER => "melakukan perubahan email user",
    ];

    const FIELDS_UMUSER = ["um_id", "um_user_name", "nama", "email", "phone", "is_banned", "id_instansi", "checkmark_verified"];

    public function initialize()
    {
        $this->setSchema("jaga");
        $this->setSource("log_moderation");

        $this->belongsTo(
            "moderated_by",
            \UmUser::class,
            "um_id",
            [
                'reusable' => true, // cache related data
                'alias'    => 'moderator',
            ]
        );
    }

    public static function loggedUmUser(Array $action, $actionMenu, $refId, $oldData, $newData, $moderatedBy) {
        $model = new LogModeration();
        $model->action = implode(";", $action);
        $model->action_menu = $actionMenu;
        $model->ref_table = "um_user";
        $model->ref_id = $refId;
        $model->data_from = json_encode($oldData);
        $model->data_to = json_encode($newData);
        $model->moderated_by = $moderatedBy;
        $model->moderated_at = DateHelper::getNowTimezoned();

        return $model->save();
    }

    public static function extractUmUser($umId) {
        $umUser = UmUser::findFirstByUmId($umId);
        $data = $umUser->toArray(self::FIELDS_UMUSER);
        $roles = UsersRoles::query()
            ->columns("Roles.name")
            ->join("Roles", 'UsersRoles.role_id = Roles.id')
            ->where("UsersRoles.user_id = :user_id:")
            ->bind(["user_id" => $umUser->um_id])
            ->execute()->toArray();
        $data["roles"] = [];
        foreach ($roles as $role) {
            array_push($data["roles"], $role["name"]);
        }

        return $data;
    }
}
