<?php

namespace App\Library\CampaignDecision;

use App\Models\CampaignDecision;

class CampaignDecisionRecorder
{
    /**
     * @param  array<string, mixed>  $group
     * @param  array<string, mixed>  $decision
     */
    public function record(array $group, array $decision): CampaignDecision
    {
        return CampaignDecision::query()->create([
            'user_id' => (int) $group['user_id'],
            'platform' => (string) $group['platform'],
            'account_id' => $group['account_id'] ?? null,
            'external_campaign_id' => (string) $group['external_campaign_id'],
            'campaign_name' => (string) ($decision['campaign_name'] ?? $group['name'] ?? ''),
            'engine_version' => (string) ($decision['engine_version'] ?? 'v2'),
            'trigger' => (string) ($decision['trigger'] ?? 'scheduled_hourly'),
            'evaluated_at' => $decision['evaluated_at'] ?? now(),
            'verdict' => (string) ($decision['verdict'] ?? ''),
            'confidence' => (float) ($decision['confidence'] ?? 0),
            'recommended_action' => (string) ($decision['recommended_action'] ?? 'NONE'),
            'recommended_budget_change_percent' => (int) ($decision['recommended_budget_change_percent'] ?? 0),
            'reason' => (string) ($decision['reason'] ?? ''),
            'capabilities_json' => $decision['capabilities'] ?? [],
            'reasons_json' => $decision['reasons'] ?? [],
            'metrics_json' => [
                'windows' => $decision['windows'] ?? [],
                'channels' => $decision['channels'] ?? [],
            ],
            'trends_json' => $decision['trend'] ?? [],
            'data_quality_json' => $decision['data_quality'] ?? [],
            'guardrail_json' => array_merge(
                $decision['guardrail'] ?? [],
                ['action_allowed' => $decision['action_allowed'] ?? false],
            ),
            'snapshot_json' => $decision,
        ]);
    }
}
