<?php

use DocuSign\eSign\Model\Signer;
use DocuSign\eSign\Model\Recipients;
use DocuSign\eSign\Model\Document;

class Agro_DocuSign_EmailDocumento extends Agro_DocuSign_Email
{
    /**
     *  @param Document[] $documentos
     */
    private array $documentos = [];

    /**
     * Adiciona um documento
     *
     * @param  string $id
     * @param  string $nome
     * @param  mixed $diretorio
     */
    public function addDocumento(string $id, string $nome, string $diretorio)
    {
        $extensao = pathinfo($diretorio, PATHINFO_EXTENSION);
        $documentoBytes = file_get_contents($diretorio);
        $documentoBase64 = base64_encode($documentoBytes);

        $this->documentos[] = new Document([
            'document_base64' => $documentoBase64,
            'name' => $nome,
            'file_extension' => $extensao,
            'document_id' => $id
        ]);

        $this->envelopeDefinition->setDocuments($this->documentos);
        echo "- Adicionado documento; <br>";
    }

    /**
     * Adiciona um signatário
     *
     * @param  string $email
     * @param  string $nome
     */
    public function addSignatario(string $email, string $nome)
    {
        echo "- ADD signatários documento... <br>";

        $this->signatarios[] = new Signer([
            'email' => $email,
            'name' => $nome,
            'recipient_id' => "1",
            'routing_order' => "1"
        ]);
    }

    /**
     * Adiciona as configurações de template e signatarios no envelope
     */
    protected function configurarSignatarios()
    {
        echo "- Configurando signatários documento... <br>";
        if (empty($this->documentos)) {
            throw new Exception("Nenhum documento foi adicionado.");
        }

        $recipients = new Recipients([
            'signers' => $this->signatarios
        ]);
        
        $this->envelopeDefinition->setRecipients($recipients);
    }
}
