<?php

namespace interfaces;

require_once WD . '/interfaces/universal_module_i.php';

interface bird_i extends universal_module_i
{
    public function requireValidApiKey(): void;

    public function requireValidServerURL(): void;

    public function sendRequest(string $endpoint, array $data = [], string $method = 'POST'): object|array|null;

    public function sendPostRequest(string $endpoint, array $data): array|object|null;

    public function sendGetRequest(string $endpoint, array $query = []): array|object|null;

    public function sendPatchRequest(string $endpoint, array $data = []): array|object|null;

    public function sendDeleteRequest(string $endpoint, array $query = []): array|object|null;

    public function createVoiceCall(string $workspaceId, string $channelId, array $payload): array|object|null;

    public function listVoiceCalls(string $workspaceId, string $channelId, array $query = []): array|object|null;

    public function getVoiceCall(string $workspaceId, string $channelId, string $callId): array|object|null;

    public function updateVoiceCall(string $workspaceId, string $channelId, string $callId, array $payload): array|object|null;

    public function answerVoiceCall(string $workspaceId, string $channelId, string $callId, array $payload = []): array|object|null;

    public function ringVoiceCall(string $workspaceId, string $channelId, string $callId, array $payload = []): array|object|null;

    public function hangupVoiceCall(string $workspaceId, string $channelId, string $callId, array $payload = []): array|object|null;

    public function playbackVoiceCall(string $workspaceId, string $channelId, string $callId, array $payload): array|object|null;

    public function sayMessage(string $workspaceId, string $channelId, string $callId, array $payload): array|object|null;

    public function gatherMessage(string $workspaceId, string $channelId, string $callId, array $payload): array|object|null;

    public function bridgeVoiceCall(string $workspaceId, string $channelId, string $callId, array $payload): array|object|null;

    public function recordVoiceCall(string $workspaceId, string $channelId, string $callId, array $payload): array|object|null;

    public function createVoiceCallRecordingSession(string $workspaceId, string $channelId, string $callId, array $payload): array|object|null;

    public function listVoiceCallRecordings(string $workspaceId, string $channelId, string $callId, array $query = []): array|object|null;

    public function getVoiceCallRecording(string $workspaceId, string $channelId, string $callId, string $recordingId): array|object|null;

    public function updateVoiceCallRecording(string $workspaceId, string $channelId, string $callId, string $recordingId, array $payload): array|object|null;

    public function getVoiceCallInsights(string $workspaceId, string $channelId, string $callId): array|object|null;

    public function getVoiceCallsLog(string $workspaceId, array $query = []): array|object|null;

    public function listNumbers(string $workspaceId, array $query = []): array|object|null;

    public function getNumber(string $workspaceId, string $numberId): array|object|null;

    public function deleteNumber(string $workspaceId, string $numberId): array|object|null;

    public function createFlashCall(string $workspaceId, string $channelId, array $payload): array|object|null;

    public function listFlashCalls(string $workspaceId, string $channelId, array $query = []): array|object|null;

    public function getFlashCall(string $workspaceId, string $channelId, string $callId): array|object|null;

    public function endFlashCall(string $workspaceId, string $channelId, string $callId, array $payload = []): array|object|null;

    public function hangupFlashCall(string $workspaceId, string $channelId, array $payload = []): array|object|null;

    public function createOutboundTestCallAndHangupWhenAccepted(string $workspaceId, string $channelId, array $options = []): array;

    public function callGateAndHangupWhenAccepted(int $countryCode, int $phone, int $timeout);

    public function callGateViaFlashCall(int $countryCode, int $phone, int $ringTimeout): void;

    public function callGatePreferringFlashCall(int $countryCode, int $phone, int $timeout): void;
}

