<?php
$this->layout = false;

use CrmSpreadsheet\CrmSpreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;

$spreadsheet = new CrmSpreadsheet();
$spreadsheet->setDefaults();
$spreadsheet->getProperties()->setTitle("Relatório Financeiro");

$abaAnalitico = $spreadsheet->getActiveSheet();

$abaAnalitico->setTitle("Analítico");

$header = array(
    array(
        'name' => 'Cliente',
        'width' => 'auto',
        'wrap' => false,
    ),
    array(
        'name' => 'CNPJ/CPF',
        'width' => 'auto',
        'wrap' => false,
    ),
    array(
        'name' => 'Telefones',
        'width' => 'auto',
        'wrap' => false,
    ),
    array(
        'name' => 'Cidade',
        'width' => 'auto',
        'wrap' => false,
    ),
    array(
        'name' => 'Unidade de negócios',
        'width' => 'auto',
        'wrap' => false,
    ),
    array(
        'name' => 'Título',
        'width' => 'auto',
        'wrap' => false,
    ),
    array(
        'name' => 'Série',
        'width' => 'auto',
        'wrap' => false,
    ),
    array(
        'name' => 'Valor',
        'width' => 'auto',
        'wrap' => false,
    ),
    array(
        'name' => 'Acréscimo',
        'width' => 'auto',
        'wrap' => false,
    ),
    array(
        'name' => 'Valor Total',
        'width' => 'auto',
        'wrap' => false,
    ),
    array(
        'name' => 'Emissão',
        'width' => 'auto',
        'wrap' => false,
    ),
    array(
        'name' => 'Vencimento',
        'width' => 'auto',
        'wrap' => false,
    ),
    array(
        'name' => 'Pagamento',
        'width' => 'auto',
        'wrap' => false,
    ),
    array(
        'name' => 'Situação',
        'width' => 'auto',
        'wrap' => false,
    ),
    array(
        'name' => 'E-mail',
        'width' => 'auto',
        'wrap' => false,
    ),
    array(
        'name' => 'Boleto',
        'width' => '80',
        'wrap' => true,
    ),
);
$spreadsheet->createHeader($header, true);

$abasExtras = array(
    'Revenda' => array('name' => 'Unidade de Negócios', 'currency' => true),
    'Cidade' => array('currency' => true),
    'Situacao' => array('name' => 'Situação', 'currency' => true),
);

$valores = array();
$linha = 2;
foreach ($data as $key => $row) {
    $coluna = 1;

    $cliente = $row->Cliente;
    $situacao = Util::getSituacaoTitulo($row->TIT_SITUACAO);

    $id = ExcelUtil::parseId($cliente->Cidade->CidadeEstado);
    if (!isset($abasExtras['Cidade'][$id])) {
        $abasExtras['Cidade'][$id] = array(
            'valor' => array(),
            'count' => 0
        );
        $abasExtras['Cidade'][$id]['valor'] = $cliente->Cidade->CidadeEstado;
    }
    $abasExtras['Cidade'][$id]['count'] += $row->TIT_VALOR_TOTAL;
    #####
    $revendaResponsavel = $cliente->getRevendaResponsavel2();
    $revenda = $revendaResponsavel->REV_FANTASIA ?? false;
    $id = "";
    if ($revenda) {
        $id .= $revendaResponsavel->REV_TIPO;
    }
    $id .= (string) $revenda;
    $id = ExcelUtil::parseId($id);
    if (!isset($abasExtras['Revenda'][$id])) {
        $abasExtras['Revenda'][$id] = array(
            'valor' => array(),
            'count' => 0
        );
        $abasExtras['Revenda'][$id]['valor'] = ExcelUtil::parseValue((string) $cliente->getRevendaResponsavel2());
    }
    $abasExtras['Revenda'][$id]['count'] += $row->TIT_VALOR_TOTAL;
    #####
    $id = ExcelUtil::parseId($situacao);
    if (!isset($abasExtras['Situacao'][$id])) {
        $abasExtras['Situacao'][$id] = array(
            'valor' => array(),
            'count' => 0
        );
        $abasExtras['Situacao'][$id]['valor'] = $situacao;
    }
    $abasExtras['Situacao'][$id]['count'] += $row->TIT_VALOR_TOTAL;

    // A
        $valor = ExcelUtil::parseValue($row->Cliente);
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $coluna++;

    // B
        $valor = ExcelUtil::parseValue($row->TIT_USUARIO);
        $valor = Util::formataCNPJCPF($valor);
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $coluna++;

    // C
        $valor = $cliente->getTelefones(" / ");
        $valor = ExcelUtil::parseValue($valor);
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $coluna++;

    // D
        $valor = ExcelUtil::parseValue($cliente->Cidade->CidadeEstado);
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $coluna++;

    // E
        $valor = ExcelUtil::parseValue($cliente->getRevendaResponsavel2());
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $coluna++;

    // F
        $valor = ExcelUtil::parseValue($row->TIT_TITULO);
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $coluna++;

    // G
        $valor = ExcelUtil::parseValue($row->TIT_SERIE);
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $coluna++;

    // H
        $valor = ExcelUtil::parseValue($row->TIT_VALOR);
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $abaAnalitico
                    ->getStyleByColumnAndRow($coluna, $linha)
                    ->getNumberFormat()
                    ->setFormatCode('"R$ "#,##0.00_-');
        $coluna++;

    // I
        $valor = ExcelUtil::parseValue($row->TIT_VALORPAGO);
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $abaAnalitico
                    ->getStyleByColumnAndRow($coluna, $linha)
                    ->getNumberFormat()
                    ->setFormatCode('"R$ "#,##0.00_-');
        $coluna++;

    // J
        $valor = ExcelUtil::parseValue($row->TIT_VALOR_TOTAL);
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $abaAnalitico
                    ->getStyleByColumnAndRow($coluna, $linha)
                    ->getNumberFormat()
                    ->setFormatCode('"R$ "#,##0.00_-');
        $coluna++;

    // K
        $valor = ExcelUtil::parseValue($row->TIT_EMISSAO);
        if ($valor != "-") {
            $valor = \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($valor);
        }
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $abaAnalitico
                    ->getStyleByColumnAndRow($coluna, $linha)
                    ->getNumberFormat()
                    ->setFormatCode('dd/mm/yyyy');
        $coluna++;

    // L
        $valor = ExcelUtil::parseValue($row->TIT_VENCIMENTO);
        if ($valor != "-") {
            $valor = \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($valor);
        }
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $abaAnalitico
                    ->getStyleByColumnAndRow($coluna, $linha)
                    ->getNumberFormat()
                    ->setFormatCode('dd/mm/yyyy');
        $coluna++;

    // M
        $valor = ExcelUtil::parseValue($row->TIT_DTPAGAMENTO);
        if ($valor != "-") {
            $valor = \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($valor);
        }
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $abaAnalitico
                    ->getStyleByColumnAndRow($coluna, $linha)
                    ->getNumberFormat()
                    ->setFormatCode('dd/mm/yyyy');
        $coluna++;

    // N
        $valor = $situacao;
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $coluna++;

    // O
        $valor = ExcelUtil::parseValue($cliente->CLI_EMAIL);
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $coluna++;

    // P
        $valor = $row->getLink('&amp;');
        if (!$valor) {
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, "-");
        } else {
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $abaAnalitico
                        ->getCellByColumnAndRow($coluna, $linha)
                        ->getHyperlink()
                        ->setUrl($valor);
        }
        $coluna++;

    $linha++;
}

if (!empty($abasExtras)) {
    $spreadsheet->abasSintetico($abasExtras);
}

$spreadsheet->setActiveSheetIndex(0);

$writer = new Xlsx($spreadsheet);
$writer->save('php://output');
