<?php

use DocuSign\eSign\Client\ApiClient;
class Agro_DocuSign_TemplateFactory
{
    const TERMO_SUB_FEDERAL_SEM_FINANCIAMENTO = 1;
    const TERMO_SUB_FEDERAL_COM_FINANCIAMENTO = 2;
    const TERMO_SUB_PR = 3;
    const TERMO_SUB_SP = 4;
    const TERMO_DADOS_BANCARIOS_SEGURADO = 5;
    const TERMO_DADOS_BANCARIOS_BENEFICIARIO = 6;
    const TERMO_DADOS_BANCARIOS_SEGURADO_ORDEM_PAGAMENTO = 7;
    const TERMO_AUTORIZACAO_ACOMPANHANTE = 8;

    /**
     * Retorna um template de acordo com o tipo informado
     *
     * @param  ApiClient $apiClient
     * @param  int $tipo
     * @param  array|null $parametros Valor contendo as informações necessárias para buscar os campos que devem ser preenchidos no template
     * @return Agro_DocuSign_Template
     */
    public static function get(ApiClient $apiClient, int $tipo, ?array $parametros = null): Agro_DocuSign_Template
    {
        switch ($tipo) {
            case self::TERMO_SUB_FEDERAL_SEM_FINANCIAMENTO:
                return new Agro_DocuSign_Templates_TermoPsrSemFinanciamento($apiClient, $parametros);
                break;
            case self::TERMO_SUB_FEDERAL_COM_FINANCIAMENTO:
                return new Agro_DocuSign_Templates_TermoPsrComFinanciamento($apiClient, $parametros);
                break;
            case self::TERMO_SUB_PR:
                return new Agro_DocuSign_Templates_TermoSubvencaoPR($apiClient, $parametros);
                break;
            case self::TERMO_SUB_SP:
                return new Agro_DocuSign_Templates_TermoSubvencaoSP($apiClient, $parametros);
                break;
            case self::TERMO_DADOS_BANCARIOS_SEGURADO:
                return new Agro_DocuSign_Templates_TermoDadosBancariosSegurado($apiClient, $parametros);
                break;
            case self::TERMO_DADOS_BANCARIOS_BENEFICIARIO:
                return new Agro_DocuSign_Templates_TermoDadosBancariosBeneficiario($apiClient, $parametros);
                break;
            case self::TERMO_DADOS_BANCARIOS_SEGURADO_ORDEM_PAGAMENTO:
                return new Agro_DocuSign_Templates_TermoDadosBancariosSeguradoOrdemPagamento($apiClient, $parametros);
                break;
            case self::TERMO_AUTORIZACAO_ACOMPANHANTE:
                return new Agro_DocuSign_Templates_TermoAutorizacaoAcompanhante($apiClient, $parametros);
                break;
            default:
                throw new Exception("Template informado não é válido.");
                break;
        }
    }
}
