<?php
/**
 * ShippingProviderInterface
 * 
 * Interface para provedores de cálculo de frete.
 * Implementa o Strategy Pattern para suportar múltiplos fornecedores.
 * 
 * @package Shipping\Providers
 */

namespace Shipping\Providers;

interface ShippingProviderInterface
{
    /**
     * Calcula opções de frete para um conjunto de itens
     * 
     * @param array $items Array de produtos com peso/dimensões
     * @param string $originZipcode CEP de origem
     * @param string $destinationZipcode CEP de destino
     * @param int $storeId ID da loja (multi-tenant)
     * @return array Lista de opções de frete
     */
    public function calculateShipping(
        array $items,
        string $originZipcode,
        string $destinationZipcode,
        int $storeId
    ): array;
    
    /**
     * Retorna o nome do provedor
     * @return string
     */
    public function getProviderName(): string;
    
    /**
     * Verifica se o provedor está disponível/configurado
     * @return bool
     */
    public function isAvailable(): bool;
}
