<?php

namespace app\model;

use think\Model;

class BpsAdCampaign extends Model
{
    // 设置当前模型对应的完整数据表名称
    protected $table = 'bps.bps_ads_campaign';

    // 设置主键
    protected $pk = 'id';

    // 设置自动时间戳
    protected $autoWriteTimestamp = true;

    // 定义时间戳字段
    protected $createTime = 'create_at';
    protected $updateTime = 'update_at';

    // 设置字段类型和默认值
//    protected $casts = [
//        'campaign_id' => 'int',
//        'account_id' => 'int',
//        'budget_amount_micros' => 'int',
//    ];

    // 默认值设置
    protected $defaults = [
        'status' => 'ENABLED', // 活动状态默认值为 'ENABLED'
//        'advertising_channel_type' => 'SEARCH', // 广告渠道类型默认值为 'SEARCH'
        'platform_type' => 2, // 广告渠道类型默认值为 'SEARCH'
    ];


    // 状态判断常量
    const STATUS_UNSPECIFIED = 0;
    const STATUS_UNKNOWN = 1;
    const STATUS_ENABLED = 2;
    const STATUS_PAUSED = 3;
    const STATUS_REMOVED = 4;

    // 获取活动状态
    public function getStatusTextAttr($value, $data)
    {
        $statusMap = [
            self::STATUS_UNSPECIFIED => 'UNSPECIFIED',
            self::STATUS_UNKNOWN => 'UNKNOWN',
            self::STATUS_ENABLED => 'ENABLED',
            self::STATUS_PAUSED => 'PAUSED',
            self::STATUS_REMOVED => 'REMOVED',
        ];
        return $statusMap[$data['status']] ?? 'UNKNOWN';
    }

    // 更新状态方法
//    public function updateStatus($status)
//    {
//        if (!in_array($status, [self::STATUS_ENABLED, self::STATUS_PAUSED, self::STATUS_REMOVED])) {
////            throw new \think\exception\ValidateException('Invalid status');
//        }
//        $this->status = $status;
//        return $this->save();
//    }



    // 判断当前活动状态
    public function isEnabled()
    {
        return $this->status == self::STATUS_ENABLED;
    }

    public function isPaused()
    {
        return $this->status == self::STATUS_PAUSED;
    }

    public function isRemoved()
    {
        return $this->status == self::STATUS_REMOVED;
    }


    // 关联 Customer 模型(广告活动属于客户)
//    public function customer()
//    {
//        return $this->belongsTo(GoogleAdsCustomer::class, 'customer_id', 'customer_id');
//    }

    // 关联 AdGroup 模型(一个广告活动下有多个广告组)
    public function adGroups()
    {
        return $this->hasMany(AdGroup::class, 'campaign_id', 'campaign_id');
    }

    // 关联 Ad 模型(一个广告活动下有多个广告)
    public function ads()
    {
        return $this->hasManyThrough(BpsAdAd::class, BpsAdSet::class, 'campaign_id', 'ad_set_id', 'campaign_id', 'ad_set_id');
    }

    // 关联到广告数据表
//    public function adDayData()
//    {
//        return $this->hasMany(DayData::class, 'campaign_id', 'campaign_id');
//    }
    public function adDayData()
    {
        return $this->hasMany(DayData::class, 'campaign_id', 'campaign_id');
    }
        // 关联到素材关系
    public function assetRelations()
    {
        return $this->hasMany(AssetRelation::class, 'campaign_id', 'campaign_id');
    }
}