<?php

use Jaga\Models\BaseModel;

/**
 * Class Banner
 * @property Attachments|null $attachment
 */
class Banner extends BaseModel
{
    public $id;
    public $attachment_id;
    public $filename;
    public $keyword;
    public $click_url;
    public $param_url;
    public $view_order;
    public $view_order_mobile;
    public $show_start;
    public $show_end;
    public $mode;
    public $is_active;
    public $created_at;
    public $updated_at;
    public $deleted_at;
    public $created_by;
    public $updated_by;
    public $deleted_by;

    const S3_DIRECTORY = 'banner';

    const MODE_WEB          = 'web';
    const MODE_MOBILE       = 'mobile';
    const MODE_BOTH         = 'both';
    const MODE_WEB_EN       = 'web_en';
    const MODE_MOBILE_EN    = 'mobile_en';
    const MODE_BOTH_EN      = 'both_en';

    const OPTION_MODE   = [self::MODE_WEB,self::MODE_MOBILE,self::MODE_BOTH, self::MODE_WEB_EN, self::MODE_MOBILE_EN, self::MODE_BOTH_EN];

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

        $this->belongsTo(
            'attachment_id',
            \Attachments::class,
            'id',
            [
                'reusable' => true, // cache related data
                'alias' => 'attachment'
            ]
        );
    }

    public function toDetail() {
        $result = $this->toArray();
        $result["attachment"] = $this->attachment;
        $result["created_user"] = $this->modifyUserInfo($this->created_by);
        $result["updated_user"] = $this->modifyUserInfo($this->updated_by);
        $result["deleted_user"] = $this->modifyUserInfo($this->deleted_by);

        return $result;
    }

    public function modifyUserInfo($id) {
        $user = UmUser::findFirst(['conditions' => 'um_id = :id:', 'bind' => ['id' => $id]]);
        $res = null;
        if ($user) {
            $res = $user->toArray(['um_id', 'um_user_name', 'nama']);
            $roles = [];
            foreach ($user->roles as $role) {
                if ($role) {
                    $roles[] = $role->name;
                }
            }
            $res['roles'] = implode("|", $roles);
        }
        return $res;
    }

    public static function keyOrderByMode($mode) {
        if ($mode == Banner::MODE_MOBILE || $mode == Banner::MODE_MOBILE_EN) {
            $keyOrder = "view_order_mobile";
        } else {
            $keyOrder = "view_order";
        }
        return $keyOrder;
    }

    public static function keyBothByMode($mode) {
        if ($mode == Banner::MODE_WEB || $mode == Banner::MODE_MOBILE) {
            $keyBoth = Banner::MODE_BOTH;
        } elseif ($mode == Banner::MODE_WEB_EN || $mode == Banner::MODE_MOBILE_EN) {
            $keyBoth = Banner::MODE_BOTH_EN;
        } else {
            $keyBoth = $mode;
        }
        return $keyBoth;
    }
}
