<?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 Satisfação");

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

$header = array(
    array(
        'name' => 'Data de Cadastro',
        'width' => 'auto',
        'wrap' => false
    ),
);
if ($model->CLI_SITUACAO == "I") {
    $temp = array(
        array(
            'name' => 'Data de rescisão',
            'width' => 'auto',
            'wrap' => false,
        ),
        array(
            'name' => 'Motivo da rescisão',
            'width' => 'auto',
            'wrap' => false,
        )
    );
    $header = array_merge($header, $temp);
}
$headerPt2 = array(
    array(
        'name' => 'Razão Social',
        'width' => 'auto',
        'wrap' => false,
    ),
    array(
        'name' => 'CNPJ / CPF',
        'width' => 'auto',
        'wrap' => false,
    ),
    array(
        'name' => 'Unidade de Negócios',
        'width' => 'auto',
        'wrap' => false,
    ),
    array(
        'name' => 'Status',
        'width' => 'auto',
        'wrap' => false,
    ),
    array(
        'name' => 'Como nos conheceu',
        'width' => 'auto',
        'wrap' => false,
    ),
    array(
        'name' => 'Versão do sistema',
        'width' => 'auto',
        'wrap' => false,
    ),
);
$header = array_merge($header, $headerPt2);

/*
$model->CLI_IDMOTIVO
    1: avaliação sistema
    2: avaliação atendimento
    3: primeiro pós implantação
    4: segundo pós implantação
*/
    $posVendas = $model->CLI_IDMOTIVO <= 2;
    $avaliacaoImplantacao = $model->CLI_IDMOTIVO > 2;

    $headerPt3 = array();
    if($posVendas) {
        $headerPt3 = array(

            array(
                'name' => 'Data Último Pós-vendas',
                'width' => 'auto',
                'wrap' => false,
            ),
            array(
                'name' => 'Satisfação com Sistema',
                'width' => 'auto',
                'wrap' => false,
            ),
            array(
                'name' => 'Satisfação com Atendimento',
                'width' => 'auto',
                'wrap' => false,
            ),
            array(
                'name' => 'Observações Último Pós-vendas',
                'width' => 80,
                'wrap' => true,
            ),
        );
    } else {
        $headerPt3 = array(
            array(
                'name' => 'Data 1ª Avaliação Implantação',
                'width' => 'auto',
                'wrap' => false,
            ),
            array(
                'name' => 'Satisfação 1ª Avaliação implantação',
                'width' => 'auto',
                'wrap' => false,
            ),
            array(
                'name' => 'Observações Avaliação',
                'width' => 80,
                'wrap' => true,
            ),
            array(
                'name' => 'Data 2ª Avaliação',
                'width' => 'auto',
                'wrap' => false,
            ),
            array(
                'name' => 'Satisfação 2ª Avaliação Implantação',
                'width' => 'auto',
                'wrap' => false,
            ),
            array(
                'name' => 'Observações Avaliação',
                'width' => 80,
                'wrap' => true,
            ),
        );
    }
    $header = array_merge($header, $headerPt3);

    $spreadsheet->createHeader($header, true);

    $abasExtras = array();
    if($posVendas) {
        $abasExtras = array(
            'AvaliacaoSistema' => array('name' => 'Avaliação sistema', 'currency' => false),
            'AvaliacaoAtendimento' => array('name' => 'Avaliação atendimento', 'currency' => false),
        );
    } else {
        $abasExtras = array(
            'AvaliacaoImplantacao' => array('name' => 'Avaliação implantação', 'currency' => false),
            'AvaliacaoPosImplantacao' => array('name' => 'Avaliação pós implantação', 'currency' => false),
        );
    }

    $linha = 2;
    foreach ($data as $key => $cliente) {
        if($avaliacaoImplantacao) {
            /* 1ª avaliação */
            $satisfacaoImplantacao = $cliente->getSatisfacao('CLI_NOTA_SATISFACAO_IMPLANTACAO', false) ?? "0 - Não Avaliado";
            $satisfacaoImplantacao = ExcelUtil::parseValue($satisfacaoImplantacao);
            $id = ExcelUtil::parseId($satisfacaoImplantacao);
            if (!isset($abasExtras['AvaliacaoImplantacao'][$id])) {
                $abasExtras['AvaliacaoImplantacao'][$id] = array(
                    'valor' => array(),
                    'count' => 0
                );
                $abasExtras['AvaliacaoImplantacao'][$id]['valor'] = $satisfacaoImplantacao;
            }
            $abasExtras['AvaliacaoImplantacao'][$id]['count']++;

            /* 2ª avaliação */
            $satisfacaoImplantacao2 = $cliente->getSatisfacao('CLI_NOTA_SATISFACAO_IMPLANTACAO2', false) ?? "0 - Não Avaliado";
            $satisfacaoImplantacao2 = ExcelUtil::parseValue($satisfacaoImplantacao2);
            $id = ExcelUtil::parseId($satisfacaoImplantacao2);
            if (!isset($abasExtras['AvaliacaoPosImplantacao'][$id])) {
                $abasExtras['AvaliacaoPosImplantacao'][$id] = array(
                    'valor' => array(),
                    'count' => 0
                );
                $abasExtras['AvaliacaoPosImplantacao'][$id]['valor'] = $satisfacaoImplantacao2;
            }
            $abasExtras['AvaliacaoPosImplantacao'][$id]['count']++;

        }

        if($posVendas) {
            /* satisfação sistema */
            $satisfacaoSistema = $cliente->getSatisfacao('CLI_NOTA_SATISFACAO_SISTEMA', false) ?? "0 - Não Avaliado";
            $satisfacaoSistema = ExcelUtil::parseValue($satisfacaoSistema);
            $id = ExcelUtil::parseId($satisfacaoSistema);
            if (!isset($abasExtras['AvaliacaoSistema'][$id])) {
                $abasExtras['AvaliacaoSistema'][$id] = array(
                    'valor' => array(),
                    'count' => 0
                );
                $abasExtras['AvaliacaoSistema'][$id]['valor'] = $satisfacaoSistema;
            }
            $abasExtras['AvaliacaoSistema'][$id]['count']++;
            
            /* satisfação atendimento */
            $satisfacaoAtendimento = $cliente->getSatisfacao('CLI_NOTA_SATISFACAO_ATENDIMENTO', false) ?? "0 - Não Avaliado";
            $satisfacaoAtendimento = ExcelUtil::parseValue($satisfacaoAtendimento);
            $id = ExcelUtil::parseId($satisfacaoAtendimento);
            if (!isset($abasExtras['AvaliacaoAtendimento'][$id])) {
                $abasExtras['AvaliacaoAtendimento'][$id] = array(
                    'valor' => array(),
                    'count' => 0
                );
                $abasExtras['AvaliacaoAtendimento'][$id]['valor'] = $satisfacaoAtendimento;
            }
            $abasExtras['AvaliacaoAtendimento'][$id]['count']++;
        }

        $coluna = 1;
        /* A */
        $valor = ExcelUtil::parseValue($cliente->CLI_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++;

        if ($model->CLI_SITUACAO == "I") {
            /* B */
            $valor = ExcelUtil::parseValue($cliente->CLI_DTRESCISAO);
            if ($valor != "-") {
                $valor = \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($valor);
            }
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $abaAnalitico
            ->getStyleByColumnAndRow($coluna, $linha)
            ->getNumberFormat()
            ->setFormatCode('dd/mm/yyyy');
            $coluna++;

            /* C */
            $motivoRescisao = ExcelUtil::parseValue($cliente->MotivoRescisao);
            $valor = $motivoRescisao;
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;
        }

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

        /* C/ E */
        $valor = Util::formataCNPJCPF($cliente->CLI_CNPJCPF);
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $coluna++;

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

        /* E/ G */
        $situacao = Util::getStatusCliente($cliente->CLI_SITUACAO) ?? false;
        $valor = ExcelUtil::parseValue($situacao);
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $coluna++;

        /* F/ H */
        $valor = ExcelUtil::parseValue($cliente->ComoConheceu);
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $coluna++;

        /* G/ I */
        $valor = ExcelUtil::parseValue($cliente->Versao);
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $coluna++;

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

            /* I/K */
            $valor = $satisfacaoImplantacao;
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

            /* J/ L */
            $valor = "-";
            if(!empty($cliente->CLI_DT_AVALIACAO_IMPLANTACAO)) {
                $conditions = array();
                $conditions[] = 'ATD_IDCLIENTE = ' . $cliente->CLI_IDCLIENTE;
                $conditions[] = 'ATD_DTCADASTRO = "'. Util::formatDataMysql($cliente->CLI_DT_AVALIACAO_IMPLANTACAO) . '"';
                $conditions[] = 'ATD_IDMOTIVO = 455';
                $conditions[] = 'ATD_NOTA_SATISFACAO_IMPLANTACAO = ' . $cliente->CLI_NOTA_SATISFACAO_IMPLANTACAO;
                $atendimento = Atendimentos::model()->find(implode(' AND ', $conditions));

                if (!empty($atendimento->ATD_OBS)) {
                    $valor = ExcelUtil::parseValue($atendimento->ATD_OBS);
                }
            }
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

            /* K/ M */
            $valor = ExcelUtil::parseValue($cliente->CLI_DT_AVALIACAO_IMPLANTACAO2);
            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/ N */
            $valor = $satisfacaoImplantacao2;
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

            /* M/ O */
            $valor = "-";
            if (!empty($cliente->CLI_DT_AVALIACAO_IMPLANTACAO2)) {
                $conditions = array();
                $conditions[] = 'ATD_IDCLIENTE = ' . $cliente->CLI_IDCLIENTE;
                $conditions[] = 'ATD_DTCADASTRO = "'. Util::formatDataMysql($cliente->CLI_DT_AVALIACAO_IMPLANTACAO2) . '"';
                $conditions[] = 'ATD_IDMOTIVO = 455';
                $conditions[] = 'ATD_NOTA_SATISFACAO_IMPLANTACAO = ' . $cliente->CLI_NOTA_SATISFACAO_IMPLANTACAO2;
                $atendimento = Atendimentos::model()->find(implode(' AND ', $conditions));

                if(!empty($atendimento->ATD_OBS)) {
                    $valor = ExcelUtil::parseValue($atendimento->ATD_OBS);
                }
            }
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;
        }

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

            /* I/K */
            $valor = $satisfacaoSistema;
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

            /* J/ L */
            $valor = $satisfacaoAtendimento;
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

            /* L/ M */
            $valor = "-";
            if(!empty($cliente->CLI_DT_POSVENDAS)) {
                $conditions = array();
                $conditions[] = 'ATD_IDCLIENTE = ' . $cliente->CLI_IDCLIENTE;
                $conditions[] = 'ATD_DTCADASTRO = "'. Util::formatDataMysql($cliente->CLI_DT_POSVENDAS) . '"';
                $conditions[] = 'ATD_IDMOTIVO = 467';
                $conditions[] = 'ATD_NOTA_SATISFACAO_SISTEMA = ' . $cliente->CLI_NOTA_SATISFACAO_SISTEMA;
                $conditions[] = 'ATD_NOTA_SATISFACAO_ATENDIMENTO = ' . $cliente->CLI_NOTA_SATISFACAO_ATENDIMENTO;
                $atendimento = Atendimentos::model()->find(implode(' AND ', $conditions));

                if(isset($atendimento->ATD_OBS)) {
                    $valor = ExcelUtil::parseValue($atendimento->ATD_OBS);
                }
            }
        }
        $linha++;
    }

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

    $spreadsheet->setActiveSheetIndex(0);

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