<?php

$idAgenda             = $_POST['idAgenda'];
$idUnidadeSaude       = $_POST['idUnidadeSaude'];
$idProfissinoalSaude  = $_POST['idProfissinoalSaude'];
$idGrupoProcedimento  = $_POST['idGrupoProcedimento'];
$idProcedimento       = $_POST['idProcedimento'];
$idMesAgenda          = $_POST['idMesAgenda'];
$anoAgenda            = $_POST['anoAgenda'];

$mesHoje = date("m");

if ($idMesAgenda < $mesHoje) {
  $desabilitaInput        = " disabled";
  $desativaExclusaoAgenda = "true";
} else {
  $desabilitaInput        = "";
  $desativaExclusaoAgenda = "false";
}

  # ----- pegar feriados cadastrados ------ #
  function bloquearFeriado($numroDia,$opcaoRetorno){
    require("../database/dbConection.php");
    $setDiaBloqueio = $_POST['anoAgenda'].'-'.$_POST['idMesAgenda'].'-'.$numroDia;
    $sqlPegarFeriado  = "SELECT 
    data_inicioferiado,
    data_fimferiado
    FROM reg_tb_feriados 
    WHERE (data_fimferiado>='$setDiaBloqueio' AND data_inicioferiado<='$setDiaBloqueio') AND (status_feriado='A')";    
    $stmPegarFeriado  = $rsConexao->prepare($sqlPegarFeriado);
    $stmPegarFeriado  -> execute();
    if($stmPegarFeriado->rowCount()>0){
      if($opcaoRetorno=="bloq"){
        return " disabled";
      }else{
        return "color:#a00202";
      }        
    }else{
      if($opcaoRetorno=="bloq"){
        return "";
      }else{
        return "color:#0014c9";
      }
    }
  }

  # ----- pegar afastamentos de profissional e unidade ------ #
  function bloquearAfastamento($numroDia,$opcaoRetorno, $profissionalUnidade){
    require("../database/dbConection.php");
    $setDiaBloqueio       = $_POST['anoAgenda'].'-'.$_POST['idMesAgenda'].'-'.$numroDia;
    $idUnidadeSaude       = $_POST['idUnidadeSaude'];
    $idProfissinoalSaude  = $_POST['idProfissinoalSaude'];
    $idGrupoProcedimento  = $_POST['idGrupoProcedimento'];
    $idProcedimento       = $_POST['idProcedimento'];
    
    if($profissionalUnidade=="profissional"){
      $sqlPegarAfastamento  = "SELECT 
      datainicio_afastamento,
      datafim_afastamento
      FROM reg_tb_afastamento_profissional 
      WHERE (datafim_afastamento>='$setDiaBloqueio' AND datainicio_afastamento<='$setDiaBloqueio') 
      AND (codigoestabelecimento_cnes='$idUnidadeSaude')
      AND (codigoprofissional_cnes='$idProfissinoalSaude')";
      if($idProcedimento!=""){
        $sqlPegarAfastamento .= " AND (id_procedimento='$idProcedimento')";
      }else{
        $sqlPegarAfastamento .= " AND (id_grupo_procedimento='$idGrupoProcedimento')";
      }
    }else if($profissionalUnidade=="unidade"){
      $sqlPegarAfastamento  = "SELECT 
      datainicio_afastamento,
      datafim_afastamento
      FROM reg_tb_afastamento_unidade 
      WHERE (datafim_afastamento>='$setDiaBloqueio' AND datainicio_afastamento<='$setDiaBloqueio') 
      AND (codigoestabelecimento_cnes='$idUnidadeSaude')";
    }

    $stmPegarAfastamento  = $rsConexao->prepare($sqlPegarAfastamento);
    $stmPegarAfastamento  -> execute();
    if($stmPegarAfastamento->rowCount()>0){
      if($opcaoRetorno=="bloq"){
        return " disabled";
      }else{
        return "color: #a00202";
      }        
    }else{
      if($opcaoRetorno=="bloq"){
        return "";
      }else{
        return "color: #0014c9";
      }
    }
  }

  function bloquearEdicaoVaga($numroDia){
    require("../database/dbConection.php");
    $idAgenda      = $_POST['idAgenda'];
    $stmAgendamento   = $rsConexao->prepare("SELECT COUNT(id_agendamento) AS totalAgendamento, tipo_vagaocupada FROM reg_tb_agendamentos WHERE id_agenda='$idAgenda'");
    $stmAgendamento->execute();
    $rsAgendamento  = $stmAgendamento->fetch(PDO::FETCH_OBJ);
    
    if($rsAgendamento->totalAgendamento){
      return " disabled";
    }

  }

function carregaVagas($numroDia){

  require("../database/dbConection.php");
  $idAgenda = $_POST['idAgenda'];

  $sqlExisteAgenda  = "SELECT 
  SUM(quantidadevagas_pvez) AS vagasPrimeiraVez,
  SUM(quantidadevagas_retorno) AS vagasRetorno,
  SUM(quantidadevagas_reserva) AS vagasReserva
  FROM reg_tb_agenda 
  INNER JOIN reg_tb_agenda_sub ON (reg_tb_agenda_sub.id_agenda=reg_tb_agenda.id_agenda)
  WHERE reg_tb_agenda.id_agenda='$idAgenda' AND reg_tb_agenda_sub.dia_agenda='$numroDia'";
  $stmExisteAgenda  = $rsConexao->prepare($sqlExisteAgenda);
  $stmExisteAgenda->execute();
  $totalAgendas = $stmExisteAgenda->rowCount();
  $rsAgenda     = $stmExisteAgenda->fetch(PDO::FETCH_OBJ);
  
  if ($totalAgendas > 0) {
    
    $vagasPvez    = $rsAgenda->vagasPrimeiraVez;
    $vagasRetorno = $rsAgenda->vagasRetorno;
    $vagasReserva = $rsAgenda->vagasReserva;
    return $vagasPvez."#".$vagasRetorno."#".$vagasReserva;

  } else {
    
    return "0#0#0";

  }

}

function traduzirCalendario($stringTabela){
  $diaIngles    = array('Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat');
  $diaPortugues  = array('Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sábado');
  return str_replace($diaIngles, $diaPortugues, $stringTabela);
}

function gerar_calendario($mes, $ano, $preencher_dias = false)
{

  $idAgenda     = $_POST['idAgenda'];
  $idMesAgenda  = $_POST['idMesAgenda'];
  $anoAgenda    = $_POST['anoAgenda'];
  $mesHoje      = date("m");
  $anoHoje      = date("Y");

  if ($idMesAgenda < $mesHoje && ($anoAgenda == $anoHoje || $anoAgenda < $anoHoje) || $anoAgenda < $anoHoje || ($idMesAgenda - $mesHoje) > 2) {
    $desabilitaInput        = "";
    $desativaExclusaoAgenda = "true";
  } else {
    $desabilitaInput        = "";
    $desativaExclusaoAgenda = "false";
  }
  #--------------------------------------------------------------------------------
	$locale = 'pt_BR'; // Ou o local que desejar
	$formatter_dia = new IntlDateFormatter($locale, IntlDateFormatter::FULL, IntlDateFormatter::NONE, null, null, 'EEEE');
	$formatter_dia_abrev = new IntlDateFormatter($locale, IntlDateFormatter::FULL, IntlDateFormatter::NONE, null, null, 'EEE');
	$formatter_mes = new IntlDateFormatter($locale, IntlDateFormatter::FULL, IntlDateFormatter::NONE, null, null, 'LLLL');

	$time_primeiro_dia = mktime(0, 0, 0, $mes, 1, $ano);
	$time_ultimo_dia   = mktime(0, 0, 0, $mes + 1, 0, $ano);

	// Criar objetos DateTime
	$dt_primeiro = (new DateTime())->setTimestamp($time_primeiro_dia);
	$dt_ultimo   = (new DateTime())->setTimestamp($time_ultimo_dia);

	// Número do dia da semana (1 = segunda, 7 = domingo)
	$primeiro_dia_semana = (int)$dt_primeiro->format('N');
	$ultimo_dia          = (int)$dt_ultimo->format('d');
	$ultimo_dia_semana   = (int)$dt_ultimo->format('N');

	// Nome do mês
	$nome_mes = $formatter_mes->format($dt_primeiro);

	// Nomes dos dias da semana
	$nome_dia = [];
	$nome_abreviado_dia = [];

	for ($i = 1; $i <= 7; $i++) {
		$time = mktime(0, 0, 0, $mes, $i - $primeiro_dia_semana, $ano);
		$dt = (new DateTime())->setTimestamp($time);
		$nome_dia[$i] = $formatter_dia->format($dt);
		$nome_abreviado_dia[$i] = $formatter_dia_abrev->format($dt);
	}

	// Determinar dias a serem exibidos
	$dias = [];
	if ($primeiro_dia_semana != 7) {
		$time_ultimo_dia_mes_passado = mktime(0, 0, 0, $mes, 0, $ano);
		$dt_passado = (new DateTime())->setTimestamp($time_ultimo_dia_mes_passado);
		$ultimo_dia_mes_passado = (int)$dt_passado->format('d');
		for ($i = $primeiro_dia_semana - 1; $i >= 0; $i--) {
			$dias[] = $preencher_dias ? $ultimo_dia_mes_passado - $i : '';
		}
	}
 #--------------------------------------------------------------------------------
 
  $posicao_antes = count($dias);;
  for ($i = 1; $i <= $ultimo_dia; $i++) {
    $dias[] = $i;
  }
  $posicao_depois = count($dias);
  if ($ultimo_dia_semana < 6) {
    $max = 7 - $ultimo_dia_semana;
    for ($i = 1; $i < $max; $i++) {
      $dias[] = $preencher_dias ? $i : '';
    }
  } elseif ($ultimo_dia_semana == 7) {
    for ($i = 1; $i <= 6; $i++) {
      $dias[] = $preencher_dias ? $i : '';
    }
  }

  $tabela = <<<HTML
<table class="tabela_listagem_extra" width='100%'>
<thead>
<tr>
  <th scope="col" style='text-align:center; background:#7ebfeb'>
    <abbr title="{$nome_dia[1]}">
      {$nome_abreviado_dia[1]}      
    </abbr>
  </th>
  <th scope="col" style='text-align:center; background:#e5fd59'>
    <abbr title="{$nome_dia[2]}">{$nome_abreviado_dia[2]}</abbr>
  </th>
  <th scope="col" style='text-align:center; background:#ffadad'>
    <abbr title="{$nome_dia[3]}">{$nome_abreviado_dia[3]}</abbr>
  </th>
  <th scope="col" style='text-align:center; background:#e7dba8'>
    <abbr title="{$nome_dia[4]}">{$nome_abreviado_dia[4]}</abbr>
  </th>
  <th scope="col" style='text-align:center; background:#a8e7b0'>
    <abbr title="{$nome_dia[5]}">{$nome_abreviado_dia[5]}</abbr>
  </th>
  <th scope="col" style='text-align:center; background:#eca3d6'>
    <abbr title="{$nome_dia[6]}">{$nome_abreviado_dia[6]}</abbr>
  </th>
  <th scope="col" style='text-align:center; background:#1cb424'>
    <abbr title="{$nome_dia[7]}">{$nome_abreviado_dia[7]}</abbr>
  </th>
</tr>
</thead>
<tbody>

HTML;
  $coluna = 1;
  $numeroVagas = "";
  $mesHoje   = date("m");
  $diaHoje  = date("d");
    $idMesAgenda = str_pad($_POST['idMesAgenda'], 2, '0', STR_PAD_LEFT);
  require("../database/dbConection.php");

  foreach ($dias as $i => $dia) {
    if ($coluna == 1) {
      $tabela .= '<tr>';
    }

    $class = $i < $posicao_antes || $i >= $posicao_depois ? ' class="extra"' : '';

    if ($dia < $diaHoje && $idMesAgenda == $mesHoje) {
      $diaPassado = " disabled";
    } else {
      $diaPassado = "";
    }

    if ($dia != '') {
      $retornoVagas       = explode("#",carregaVagas($dia));
      $numerVagasPVez     = $retornoVagas[0]!="0" ? $retornoVagas[0] : "";
      $numerVagasRetorno  = $retornoVagas[1]!="0" ? $retornoVagas[1] : "";
      $numerVagasReserva  = $retornoVagas[2]!="0" ? $retornoVagas[2] : "";

      $bloqueiaFeriado    = bloquearFeriado($dia,"bloq");
      $codDiaFeriado      = bloquearFeriado($dia,"cor-dia");
      $afastaProfissional = bloquearAfastamento($dia,"bloq",'profissional');
      $afastaUnidade      = bloquearAfastamento($dia,"bloq",'unidade');
      $codDiaAfastamento  = bloquearAfastamento($dia,"cor-dia",'unidade');
      $bloquearEdicaoVaga = bloquearEdicaoVaga($dia);


      if($bloquearEdicaoVaga!=" disabled" && $desabilitaInput!=" disabled" && $bloqueiaFeriado!=" disabled" && $afastaProfissional!=" disabled" && $afastaUnidade!=" disabled" && $codDiaAfastamento!=" disabled"){
        $corCampoPVezPreenchido     = $numerVagasPVez!="" ? "background-color: #d1ffed" : "";
        $corCampoRetornoPreenchido  = $numerVagasRetorno!="" ? "background-color: #d1ffed" : "";
        $corCampoReservaPreenchido  = $numerVagasReserva!="" ? "background-color: #d1ffed" : "";
      }else{
        $corCampoPVezPreenchido     = "";
        $corCampoRetornoPreenchido  = "";
        $corCampoReservaPreenchido  = "";
      }

      $tabela .= "
        <td style='font-weight: bold !important; text-align:center !important;'>
          <table style='width:103%; font-size:8pt;background:#ececec; color:#0014c9; margin-left:-5px'>
            <tr>
              <td align='center' style='border:0px !important; height: 8px !important; $codDiaFeriado; $codDiaAfastamento'>
                dia: $dia
              </td>
            </tr>
          </table>
          <table style='width:100%;margin-left:-5px' align='center'>
            <tr>            
              <td align='center' style='border:0px !important; height: 8px !important;'>
                <font style='font-size:8pt'>1ª Vez</font>
                <input type='text' id='PVez$dia' name='numeroVagasPVez[]' class='form-control text-center' style='border: 1px solid #0062a3 !important; color:#000; $corCampoPVezPreenchido' onchange='calcularVagasAlocadas(this.id), validaAlteracaoQuantidade(this.value,$dia)' onkeypress='return somenteNumero()' onblur='aplicarCorVallor(this.id)' value='$numerVagasPVez' $desabilitaInput $diaPassado $bloqueiaFeriado $afastaProfissional $afastaUnidade $bloquearEdicaoVaga autocomplete='off'>
              </td>
              <td align='center' style='border:0px !important; height:8px !important;'>
                <font style='font-size:8pt'>Retorno</font>
                <input type='text' id='retorno$dia' name='numeroVagasRetorno[]' class='form-control text-center' style='border: 1px solid #0062a3 !important; color:#000;$corCampoRetornoPreenchido' onchange='calcularVagasAlocadas(this.id), validaAlteracaoQuantidade(this.value,$dia)' onkeypress='return somenteNumero()' onblur='aplicarCorVallor(this.id)' value='$numerVagasRetorno' $desabilitaInput $diaPassado $bloqueiaFeriado $afastaProfissional $afastaUnidade $bloquearEdicaoVaga autocomplete='off'>              
              </td>
              <td align='center' style='border:0px !important; height: 8px !important;'>
                <font style='font-size:8pt'>Reserva</font>
                <input type='text' id='reserva$dia' name='numeroVagasReserva[]' class='form-control text-center' style='border: 1px solid #0062a3 !important; color:#000;$corCampoReservaPreenchido' onchange='calcularVagasAlocadas(this.id), validaAlteracaoQuantidade(this.value,$dia) ' onkeypress='return somenteNumero()' onblur='aplicarCorVallor(this.id)' value='$numerVagasReserva' $desabilitaInput $diaPassado $bloqueiaFeriado $afastaProfissional $afastaUnidade $bloquearEdicaoVaga autocomplete='off'>
              </td>
            </tr>
          </table>          
        </td>";
    } else {
      $tabela .= "<td $class style='background:#ECEFF1'>" . $dia . "</td>";
    }
    $coluna += 1;
    if ($coluna == 8) {
      $tabela .= '</tr>';
      $coluna = 1;
    }
  }
  $tabela .= <<<HTML
</tbody>
</table>
HTML;

  return $tabela;
}
echo traduzirCalendario(gerar_calendario("$idMesAgenda", "$anoAgenda"));

require("../database/dbConection.php");
$totalVagasAlocadas = 0;

# -- Pegar quantitativo já alocado já alocado no mês
  $complementoWhere = $idProcedimento == "" ? " AND (reg_tb_agenda.id_grupo_procedimento='$idGrupoProcedimento')" : " AND (reg_tb_agenda.id_procedimento='$idProcedimento')";
  $sqlVagasAlocadas = "SELECT IFNULL(SUM(quantidadevagas_pvez), 0) + IFNULL(SUM(quantidadevagas_retorno), 0) + IFNULL(SUM(quantidadevagas_reserva), 0) AS vagasAlocadas
  FROM reg_tb_agenda_sub
  INNER JOIN reg_tb_agenda ON (reg_tb_agenda_sub.id_agenda = reg_tb_agenda.id_agenda)
  WHERE (CONCAT(reg_tb_agenda.ano_agenda,'-',reg_tb_agenda.mes_agenda)='$anoAgenda-$idMesAgenda')
  AND (codigoestabelecimento_cnes='$idUnidadeSaude')
  AND (codigoprofissional_cnes='$idProfissinoalSaude')
  $complementoWhere";
  $stmVagasAlocadas = $rsConexao->prepare($sqlVagasAlocadas);
  $stmVagasAlocadas ->execute();
  $rsVagasAlocadas  = $stmVagasAlocadas->fetch(PDO::FETCH_OBJ);
  $totalVagasAlocadas  = $rsVagasAlocadas->vagasAlocadas;
  $totalVagasAlocadas = number_format($rsVagasAlocadas->vagasAlocadas,0,",",".");
?>

<script>
  $("#textoVagasAlocadas").html("Total de vagas já alocadas: <?php echo $totalVagasAlocadas;?>");
  $("#totalVagasAlocadas").val("0");
  $("#totalVagasAlocadasReserva").val("<?php echo $totalVagasAlocadas;?>");  
</script>