<?php

declare(strict_types=1);

namespace App\Services\Supplier\Channel;

use App\Services\Supplier\Dto\SupplierProjectDto;

/**
 * Контракт миграции проекта Лидерра → поставщик crm.bp-gr.ru.
 *
 * Spec: docs/superpowers/specs/2026-05-19-supplier-project-channel-failover-design.md §4.1
 *
 * Реализации (ярусы резерва):
 *   - AjaxProjectChannel — rt-project-* HTTP (primary, быстрый).
 *   - FormProjectChannel — Playwright водит форму «Мои проекты» (fallback).
 *   - FailoverProjectChannel — декоратор-оркестратор (ярус 1 → ярус 2 → ярус 3 queue).
 */
interface SupplierProjectChannel
{
    /**
     * Создаёт проект на портале, возвращает supplier external_id.
     */
    public function createProject(SupplierProjectDto $dto): int;

    /**
     * Обновляет существующий проект (квота/дни/регионы).
     */
    public function updateProject(int $externalId, SupplierProjectDto $dto): void;

    /**
     * Список проектов с портала — для дедуп-сверки и закрытия яруса 3.
     *
     * @return array<int, array<string, mixed>>
     */
    public function listProjects(): array;
}
