<?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 de Brindes");

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

$header = array(
    array(
        'name' => 'Data',
        'width' => 'auto',
        'wrap' => false,
    ),
    array(
        'name' => 'Cliente',
        'width' => 'auto',
        'wrap' => false,
    ),
    array(
        'name' => 'Funcionário',
        'width' => 'auto',
        'wrap' => false,
    ),
    array(
        'name' => 'Brinde',
        'width' => 'auto',
        'wrap' => false,
    ),
    array(
        'name' => 'Quantidade',
        'width' => 'auto',
        'wrap' => false,
    ),
);
$spreadsheet->createHeader($header, true);

$abasExtras = array(
    'Brinde' => array('currency' => false),
    'Funcionario' => array('name' => 'Funcionário', 'header2' => 'Brinde', 'currency' => false),
    'Cidade' => array('header2' => 'Brinde', 'currency' => false),
    'Revenda' => array('name' => 'Unidade de Negócios', 'header2' => 'Brinde', 'currency' => false),
);

$valores = array();
$linha = 2;
foreach ($data as $key => $row) {
    $atendimento = $row->Atendimento;
    $cliente = $atendimento->Cliente ?? false;

    $cidade = ($cliente) ? $cliente->Cidade->CidadeEstado ?? false : false;
    $cidade = ExcelUtil::parseValue($cidade);

    $revendaResponsavel = ($cliente) ? ($cliente->RevendaResponsavel2 ?? false) : false;
    $tipoRevenda = $revendaResponsavel ? $revendaResponsavel->REV_TIPO : 0;
    $revenda = ExcelUtil::parseValue((string) $revendaResponsavel);

    $funcionario = ExcelUtil::parseValue($atendimento->Funcionario);

    $brinde = ExcelUtil::parseValue((string) $row->Brinde);
    ///////////////////////////////////////////////////////
    $id = ExcelUtil::parseId($brinde);
    if (!isset($abasExtras['Brinde'][$id])) {
        $abasExtras['Brinde'][$id] = array(
            'valor' => array(),
            'count' => 0
        );
        $abasExtras['Brinde'][$id]['valor'] = $brinde;
    }
    $abasExtras['Brinde'][$id]['count']++;
    #####
    $id = $funcionario . $brinde;
    $id = ExcelUtil::parseId($id);
    if (!isset($abasExtras['Funcionario'][$id])) {
        $abasExtras['Funcionario'][$id] = array(
            'valor' => array(),
            'count' => 0
        );
        $abasExtras['Funcionario'][$id]['valor'] = array(
            0 => $funcionario,
            1 => $brinde
        );
    }
    $abasExtras['Funcionario'][$id]['count']++;
    #####
    $id = $cidade . $brinde;
    $id = ExcelUtil::parseId($id);
    if (!isset($abasExtras['Cidade'][$id])) {
        $abasExtras['Cidade'][$id] = array(
            'valor' => array(),
            'count' => 0
        );
        $abasExtras['Cidade'][$id]['valor'] = array(
            0 => $cidade,
            1 => $brinde
        );
    }
    $abasExtras['Cidade'][$id]['count']++;
    #####
    $id = $tipoRevenda . $revenda . $brinde;
    $id = ExcelUtil::parseId($id);
    if (!isset($abasExtras['Revenda'][$id])) {
        $abasExtras['Revenda'][$id] = array(
            'valor' => array(),
            'count' => 0
        );
        $abasExtras['Revenda'][$id]['valor'] = array(
            0 => $revenda,
            1 => $brinde
        );
    }
    $abasExtras['Revenda'][$id]['count']++;

    $coluna = 1;

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

    # B
        if (!empty($atendimento->Cliente)) {
            $valor = ExcelUtil::parseValue($atendimento->Cliente);
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        } else {
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, "-");
        }
        $coluna++;

    # C
        $valor = $funcionario;
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $coluna++;

    # D
        $valor = $brinde;
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $coluna++;

    # E
        $valor = ExcelUtil::parseValue($row->BRIQTD);
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $coluna++;

    $linha++;
}

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

$spreadsheet->setActiveSheetIndex(0);

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