<?php

namespace App\Mcp\Tools\TikTok;

use App\Models\TikTokConnection;
use Illuminate\Contracts\JsonSchema\JsonSchema;
use Laravel\Mcp\Request;
use Laravel\Mcp\Response;
use Laravel\Mcp\Server\Attributes\Description;
use Laravel\Mcp\Server\Tool;

#[Description('Select a TikTok advertiser for the authenticated user.')]
class SelectAdvertiser extends Tool
{
    public function schema(JsonSchema $schema): array
    {
        return ['advertiser_id' => $schema->string()->required()];
    }

    public function handle(Request $request): Response
    {
        $connection = TikTokConnection::query()->where('user_id', $request->user()?->getAuthIdentifier())->first();
        $advertiserId = $request->validate(['advertiser_id' => ['required', 'string']])['advertiser_id'];
        if ($connection === null || ! is_array($connection->advertisers)) {
            return Response::error('List TikTok advertisers before selecting one.');
        }

        $advertiser = collect($connection->advertisers)->firstWhere('advertiser_id', $advertiserId);
        if (! is_array($advertiser)) {
            return Response::error('Choose a TikTok advertiser returned by TikTok.');
        }

        $attributes = [
            'advertiser_id' => $advertiserId,
            'advertiser_name' => $advertiser['advertiser_name'],
        ];
        if ((string) $connection->advertiser_id !== $advertiserId) {
            $attributes += [
                'identities' => null,
                'identity_id' => null,
                'identity_authorized_bc_id' => null,
                'identity_type' => null,
                'identity_name' => null,
                'tiktok_posts' => null,
                'tiktok_item_id' => null,
            ];
        }
        $connection->forceFill($attributes)->save();

        return Response::json([
            'ok' => true,
            'advertiser_id' => $advertiserId,
            'advertiser_name' => $advertiser['advertiser_name'],
        ]);
    }
}
