<?php

namespace app\common\model;

use support\think\Model;

/**
 * ChannelManage
 */
class ChannelManage extends Model
{
    // 表名
    protected $name = 'channel_manage';

    // 自动写入时间戳字段
    protected $autoWriteTimestamp = true;

    // 字段类型转换
    protected $type = [
        'create_time' => 'integer',
        'update_time' => 'integer',
        'ip_white'    => 'json',
    ];


    /**
     * 获取 IP 白名单，统一返回字符串数组格式
     * 兼容：["127.0.0.1"]、[{"value":"127.0.0.1"}]、[{"127.0.0.1":""}]
     */
    public function getipWhiteAttr($value): array
    {
        $arr = is_array($value) ? $value : (!$value ? [] : json_decode($value, true));
        if (!is_array($arr)) {
            return [];
        }
        $result = [];
        foreach ($arr as $item) {
            if (is_string($item)) {
                $result[] = $item;
            } elseif (is_array($item)) {
                if (isset($item['value'])) {
                    $result[] = $item['value'];
                } else {
                    $key = array_key_first($item);
                    if ($key !== null && $key !== '') {
                        $result[] = $key;
                    }
                }
            }
        }
        return array_values(array_filter($result));
    }

    /**
     * 写入 IP 白名单，存储格式 ["127.0.0.1","192.168.1.1"]
     */
    public function setipWhiteAttr($value): array
    {
        $arr = is_array($value) ? $value : [];
        $result = [];
        foreach ($arr as $ip) {
            $ip = is_string($ip) ? trim($ip) : '';
            if ($ip !== '') {
                $result[] = $ip;
            }
        }
        return array_values($result);
    }

    /**
     * 创建时自动生成密钥：strtoupper(md5(name+id))
     */
    protected static function onAfterInsert($model): void
    {
        $pk = $model->getPk();
        $secret = strtoupper(md5($model->name . $model->$pk));
        $model->where($pk, $model->$pk)->update(['secret' => $secret]);
    }

    public function admin(): \think\model\relation\BelongsTo
    {
        return $this->belongsTo(\app\admin\model\Admin::class, 'admin_id', 'id');
    }
}