<?php

namespace App\Models;

use App\Services\UserFun;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Arr;
use Illuminate\Support\Str;
class TgMsg extends Model
{
    protected $table = 'tg_msg';

    protected $guarded = ['id'];

    protected $casts = [
        'message_date' => 'datetime',
        'raw' => 'array',
    ];

    public static function storeFromWebhookJson(string|array $json): self
    {
        // 當$json是 string 時才做 Json2Arr，否則直接當成已展平的資料用
        $data = is_array($json) ? $json : UserFun::Json2Arr($json);
        // 要儲存的欄位清單
        $fields = collect($data)->only([
            'message_message_id',
            'message_from_id',
            'message_from_is_bot',
            'message_from_first_name',
            'message_from_last_name',
            'message_from_username',
            'message_from_language_code',
            'message_chat_id',
            'message_chat_title',
            'message_chat_type',
            'message_chat_all_members_are_administrators',
            'message_text',
            'message_entities_0_offset',
            'message_entities_0_length',
            'message_entities_0_type',
            'token',
        ])->toArray();

        // 處理 message_date (timestamp -> datetime)
        if (isset($data['message_date'])) {
            $fields['message_date'] = date('Y-m-d H:i:s', $data['message_date']);
        }

        // 原始扁平化資料存入 raw 欄位
        $fields['raw'] = $data;

        return self::updateOrCreate(
            ['update_id' => $data['update_id']],
            $fields
        );
    }
}
