<?php
$this->layout = false;

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

$incluirAnalitico = !$model->SINTETICO;

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

$abaAnalitico = $spreadsheet->getActiveSheet();

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

    $dataLancamento = array();
    if ($incluirDataLancamento) {
        $dataLancamento[] = array(
            'name' => 'Data Lançamento',
            'width' => 'auto',
            'wrap' => false
        );
    }

    $header = array(
        array(
            'name' => 'Data Atividade',
            'width' => 'auto',
            'wrap' => false,
        ),
        array(
            'name' => 'Hora de Início',
            'width' => 'auto',
            'wrap' => false,
        ),
        array(
            'name' => 'Hora final',
            'width' => 'auto',
            'wrap' => false,
        ),
        array(
            'name' => 'Total de Horas',
            'width' => 'auto',
            'wrap' => false,
        ),
        array(
            'name' => 'Cliente',
            'width' => 'auto',
            'wrap' => false,
        ),
        array(
            'name' => 'Cidade',
            'width' => 'auto',
            'wrap' => false,
        ),
        array(
            'name' => 'Unidade de negócios',
            'width' => 'auto',
            'wrap' => false,
        ),
        array(
            'name' => 'Autor',
            'width' => 'auto',
            'wrap' => false,
        ),
        array(
            'name' => 'Motivo',
            'width' => 'auto',
            'wrap' => false,
        ),
        array(
            'name' => 'Observações',
            'width' => '80',
            'wrap' => true,
        ),
        array(
            'name' => 'Tipo',
            'width' => 'auto',
            'wrap' => false,
        ),
        array(
            'name' => 'Status',
            'width' => 'auto',
            'wrap' => false,
        ),
        array(
            'name' => 'Nível de Interesse',
            'width' => 'auto',
            'wrap' => false,
        ),
    );
    if (!empty($model->ATD_IDMOTIVO) && in_array(151, $model->ATD_IDMOTIVO)) {
        $header[] = array(
            'name' => 'Pendência',
            'width' => 'auto',
            'wrap' => false,
        );
        $header[] = array(
            'name' => 'Local da Pendência',
            'width' => 'auto',
            'wrap' => false,
        );
    }
    $header = array_merge($dataLancamento, $header);

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

$abasExtras = array(
    'Motivo' => array('currency' => false),
    'Tipo' => array('currency' => false),
    'Cidade' => array('currency' => false),
    'Revenda' => array('name' => 'Unidade de Negócios', 'currency' => false),
);
if (in_array(User::getPrivilegio(), array(1, 6, 7, 8, 9, 10, 11, 13, 14, 16, 17, 18, 19,  20))) {
  $abasExtras['FechamentoNegativo'] = array('name' => 'Motivo Fechamento Negativo', 'currency' => false);  
}

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

    $cliente = false;
    $isInteressado = false;
    if ($model->ATD_LIMIT) {
        $cliente = $atendimento;
        $atendimento = $atendimento->UltimoAtendimento;
    } elseif (empty($atendimento->ATD_IDCLIENTE) && !empty($atendimento->ATD_IDINTERESSADO)) {
        $cliente = $atendimento->Interessado;
        $isInteressado = true;
    } else {
        $cliente = $atendimento->Cliente;
    }

    #######
    $tipoMotivo = isset($atendimento->Motivo->MOT_TIPO) ? $atendimento->Motivo->MOT_TIPO : "Não informado";
    $motivoSetor = Util::getMotivoByTipo($atendimento->ATD_TIPO, $atendimento->Motivo, $atendimento->ATD_IDMOTIVO, $tipoMotivo);

    $id = ExcelUtil::parseId($motivoSetor);
    if (!isset($abasExtras['Motivo'][$id])) {
        $abasExtras['Motivo'][$id] = array(
            'valor' => array(),
            'count' => 0
        );
        $abasExtras['Motivo'][$id]['valor'] = ExcelUtil::parseValue($motivoSetor);
    }
    $abasExtras['Motivo'][$id]['count']++;
    #######
    $tipos = explode(',', $atendimento->ATD_TIPO);
    foreach($tipos as $codigoTipo) {
        $tipo = Util::getTipoAtendimento($codigoTipo);

        $id = ExcelUtil::parseId($tipo);
        if (!isset($abasExtras['Tipo'][$id])) {
            $abasExtras['Tipo'][$id] = array(
                'valor' => array(),
                'count' => 0
            );
            $abasExtras['Tipo'][$id]['valor'] = ExcelUtil::parseValue($tipo);
        }
        $abasExtras['Tipo'][$id]['count']++;
    }
    #######
    if ($atendimento->ATD_IDMOTIVO == 453) {
        $cidade = '0 - Pendência CRM';
    } else {
        $cidade = $cliente->Cidade->CidadeEstado ?? 'Vazio';
        $cidade = ExcelUtil::parseValue($cidade);
    }
    $id = ExcelUtil::parseId($cidade);
    if (!isset($abasExtras['Cidade'][$id])) {
        $abasExtras['Cidade'][$id] = array(
            'valor' => array(),
            'count' => 0
        );
        $abasExtras['Cidade'][$id]['valor'] = $cidade;
    }
    $abasExtras['Cidade'][$id]['count']++;
    #######
    $id = "";
    if ($atendimento->ATD_IDMOTIVO == 453) {
        $revenda = '0 - Pendência CRM';
    } else {
        if (!empty($cliente->CLI_IDCLIENTE)) {
            $revendaResponsavel = $cliente->getRevendaResponsavel2() ?? false;
        } else {
            $revendaResponsavel = $cliente->Revenda ?? false; // relação interessado
        }
        $revenda = ExcelUtil::parseValue((string) $revendaResponsavel);
        if ($revendaResponsavel) {
            $id .= $revendaResponsavel->REV_TIPO;
        }
    }
    $id .= $revenda;
    $id = ExcelUtil::parseId($id);
    if (!isset($abasExtras['Revenda'][$id])) {
        $abasExtras['Revenda'][$id] = array(
            'valor' => array(),
            'count' => 0
        );
        $abasExtras['Revenda'][$id]['valor'] = $revenda;
    }
    $abasExtras['Revenda'][$id]['count']++;


    if (in_array(User::getPrivilegio(), array(1, 6, 7, 8, 9, 10, 11, 13, 14, 16, 17, 18, 19,  20))) {

        if ($atendimento->ATD_IDMOTIVO == 453) {
            $motivoFn = '0 - Pendência CRM';
        } else {
            $motivoFn = isset($atendimento->MotivoFechamentoNegativo->MOT_DESCRICAO) ? $atendimento->MotivoFechamentoNegativo->MOT_DESCRICAO : 'Vazio';
            $motivoFn = ExcelUtil::parseValue($motivoFn);
        }
        $id = ExcelUtil::parseId($motivoFn);
        if (!isset($abasExtras['FechamentoNegativo'][$id])) {
            $abasExtras['FechamentoNegativo'][$id] = array(
                'valor' => array(),
                'count' => 0
            );
            $abasExtras['FechamentoNegativo'][$id]['valor'] = $motivoFn;
        }
        $abasExtras['FechamentoNegativo'][$id]['count']++;
    }

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

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

        # B/C
        $valor = ExcelUtil::parseValue($atendimento->ATD_HORAINICIO);
        if ($valor != "-") {
            $data = $atendimento->ATD_DTCADASTRO . " " . $atendimento->ATD_HORAINICIO;
            $dateTime = DateTime::createFromFormat('d/m/Y H:i:s', $data);
            $dateTime = $dateTime->format('Y-m-d H:i:s');
            $valor = \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($dateTime);
        }
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $abaAnalitico
                    ->getStyleByColumnAndRow($coluna, $linha)
                    ->getNumberFormat()
                    ->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_TIME3);
        $coluna++;

        # C/D
        $valor = ExcelUtil::parseValue($atendimento->ATD_HORAFINAL);
        if ($valor != "-") {
            $data = $atendimento->ATD_DTCADASTRO . " " . $atendimento->ATD_HORAFINAL;
            $dateTime = DateTime::createFromFormat('d/m/Y H:i:s', $data);
            $dateTime = $dateTime->format('Y-m-d H:i:s');
            $valor = \PhpOffice\PhpSpreadsheet\Shared\Date::PHPToExcel($dateTime);
        }
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $abaAnalitico
                    ->getStyleByColumnAndRow($coluna, $linha)
                    ->getNumberFormat()
                    ->setFormatCode(\PhpOffice\PhpSpreadsheet\Style\NumberFormat::FORMAT_DATE_TIME3);
        $coluna++;

        # D/E
        $valor = ExcelUtil::parseValue($atendimento->ATD_TOTALHORAS);
        if ($valor != "-") {
            $dateTime = DateTime::createFromFormat('H:i:s', $valor);
            $valor = $dateTime->format('H:i');
        }
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $coluna++;

        # E/F
        $valor = ExcelUtil::parseValue($cliente);
        if ($isInteressado) {
            $valor .= " (Interessado)";
        }
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $coluna++;

        # F/G
        $valor = $cidade;
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $coluna++;

        # G/H
        $valor = $revenda;
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $coluna++;

        # H/I
        $valor = ExcelUtil::parseValue($atendimento->Funcionario);
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $coluna++;

        # I/J
        $valor = ExcelUtil::parseValue($motivoSetor);
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $coluna++;

        # J/K
        $valor = ExcelUtil::parseValue($atendimento->ATD_OBS);
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $coluna++;

        # K/L
        if (!empty($atendimento->ATD_TIPO)) {
            $valor = Util::getTipoAtendimento(explode(', ', $atendimento->ATD_TIPO));
            $valor = ExcelUtil::parseValue($valor);
        }
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $coluna++;

        # L/M
        $valor = ExcelUtil::parseValue($atendimento->ATD_SITUACAO);
        if ($valor != "-") {
            $valor = Util::getSituacaoAtendimento($valor);
        }
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $coluna++;

        # M/N
        $valor = Util::getNivelInteresse($atendimento->ATD_NIVELINTERESSE);
        $valor = ExcelUtil::parseValue($valor);
        $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
        $coluna++;

        if (!empty($model->ATD_IDMOTIVO) && in_array(151, $model->ATD_IDMOTIVO)) {
            # N/O
            $valor = $atendimento->Pendencia->SOL_IDPENDENCIA ?? "-";
            $valor = ExcelUtil::parseValue($valor);
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;

            # O/P
            $valor = $atendimento->Pendencia->Local ?? "-";
            $valor = ExcelUtil::parseValue($valor);
            $abaAnalitico->setCellValueByColumnAndRow($coluna, $linha, $valor);
            $coluna++;
        }

        $linha++;
    }
}

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

if (!$incluirAnalitico) {
    $spreadsheet->removeSheetByIndex(0);
}
$spreadsheet->setActiveSheetIndex(0);

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