<?php
session_start();
header("Access-Control-Allow-Origin: *");
require_once("./conexao.php");
date_default_timezone_set('America/Bahia');

// LÊ TUDO QUE PRECISO DA SESSÃO PRIMEIRO
$loja_id = $_SESSION['loja'];
$id_user = $_SESSION['id_user'];
$tipo_user = $_SESSION['tipo_user'];

// ADICIONEI PARA DESTRAVAR O SISTEMA:
session_write_close();

$conn    = conn();
$conn_s = conn_s();

$result = '';

$loja_id = $_SESSION['loja'];
$lojas_com_boqueta_e_estoque = [1,2,3,4,5,6,7];
$__LOJA_STOCK = 'LOJA_'.$loja_id.'STOCK';

$filtrar_user = "";
if($_SESSION['id_user'] != 6){
  $filtrar_user = " a.id_user <> 6 AND ";
}

// 1. MONTAGEM DA QUERY PRINCIPAL
if ($_SESSION['loja'] != 'todas') {
  $pesquisa = "SELECT *,a.id,b.id_processo,b.id_user, b.data_cadastro as ddt FROM processos_iniciados as a 
  INNER JOIN processos_gerenciamento as b ON a.id = b.id_processo_iniciado
  WHERE $filtrar_user a.loja_id = $loja_id AND";
} else {
  $pesquisa = "SELECT *,a.id,b.id_processo,b.id_user, b.data_cadastro as ddt FROM processos_iniciados as a 
  INNER JOIN processos_gerenciamento as b ON a.id = b.id_processo_iniciado
  WHERE $filtrar_user ";
}

if (!empty($_SESSION['tipo_user']) && $_SESSION['tipo_user'] == '1') {
  $pesquisa .= " a.id_user = '". $_SESSION['id_user'] ."' AND";
}

$pesquisa .= " a.situacao = '0' AND b.id = (
select MAX(id) as id FROM processos_gerenciamento WHERE id_processo_iniciado = a.id
) GROUP BY a.id ORDER BY a.id DESC ";

$getSolicitacos = mysqli_query($conn, $pesquisa);

$contador_total = 0;
$array_id_processos = array();
$array_geral = array();
$array_times = array();

$processos = [];
$processo_ids = [];
$todos_users_ids = [];

// 2. COLETA DE TODOS OS CARDS INICIAIS
if (mysqli_num_rows($getSolicitacos) > 0) {
    while ($row = mysqli_fetch_array($getSolicitacos)) {
        if (empty($row['id'])) continue;
        $processos[] = $row;
        $processo_ids[] = $row['id'];
        $todos_users_ids[] = $row['id_user']; // Adiciona o criador à lista de usuários
    }
}

// SE TIVER CARDS, FAZEMOS AS BUSCAS EM LOTE (BATCH FETCHING)
if (!empty($processo_ids)) {
    $in_processos = implode(',', $processo_ids);
    
    // --- LOTE: PRODUTOS ---
    $produtos_por_processo = [];
    $produto_ids = [];
    $q_prods = mysqli_query($conn, "SELECT * FROM processos_produtos WHERE id_processo IN ($in_processos)");
    while($p = mysqli_fetch_assoc($q_prods)) {
        $produtos_por_processo[$p['id_processo']][] = $p;
        $produto_ids[] = $p['id_produto'];
    }

    // --- LOTE: PRODUTOS WEB (SQL SERVER) ---
    $produtos_web_map = [];
    if (!empty($produto_ids)) {
        $in_produtos = implode(',', array_unique($produto_ids));
        $q_web = mysqli_query($conn_s, "SELECT * FROM UNI_PRODUTOS_WEB WHERE id IN ($in_produtos)");
        while($pw = mysqli_fetch_assoc($q_web)) {
            $produtos_web_map[$pw['id']] = $pw;
        }
    }

    // --- LOTE: ATIVIDADES ---
    $atividades_por_processo = [];
    $q_ativ = mysqli_query($conn, "SELECT * FROM processos_atividade WHERE processo_id IN ($in_processos) AND status = '0'");
    while($a = mysqli_fetch_assoc($q_ativ)) {
        $atividades_por_processo[$a['processo_id']][] = $a;
        $todos_users_ids[] = $a['user_id']; // Adiciona usuário da atividade
    }

    // --- LOTE: VENDEDORES ---
    $vendedor_por_processo = [];
    $q_vend = mysqli_query($conn, "SELECT id_processo_iniciado, id_user FROM processos_gerenciamento WHERE id_processo_iniciado IN ($in_processos) AND id_processo = '1'");
    while($v = mysqli_fetch_assoc($q_vend)) {
        $vendedor_por_processo[$v['id_processo_iniciado']] = $v['id_user'];
        $todos_users_ids[] = $v['id_user']; // Adiciona vendedor
    }

    // --- LOTE: OBSERVAÇÕES ---
    $obs_por_processo = [];
    $q_obs = mysqli_query($conn, "SELECT * FROM processos_obs WHERE id_processo IN ($in_processos)");
    while($o = mysqli_fetch_assoc($q_obs)) {
        $obs_por_processo[$o['id_processo']] = $o;
    }

    // --- LOTE: USUÁRIOS (Busca todos os nomes de uma vez só) ---
    $users_map = [];
    $todos_users_ids = array_unique(array_filter($todos_users_ids));
    if (!empty($todos_users_ids)) {
        $in_users = implode(',', $todos_users_ids);
        $q_users = mysqli_query($conn, "SELECT id, nome FROM user WHERE id IN ($in_users)");
        while($u = mysqli_fetch_assoc($q_users)) {
            $users_map[$u['id']] = $u;
        }
    }

    // 3. MONTAGEM DO HTML (AGORA TUDO ESTÁ NA MEMÓRIA, SEM NOVAS QUERIES!)
    foreach ($processos as $lista) {
        $cor_da_caixa = "";
        $icon_da_caixa = "";

        $array_id_processos[$contador_total] = $lista['id'];
        $array_geral[$contador_total] = array(
            "id" => $lista['id'],
            "andamento" => $lista['id_processo']
        );
        $contador_total++;

        // Pega dados do usuário da memória
        $getDadosUser = isset($users_map[$lista['id_user']]) ? $users_map[$lista['id_user']] : ['nome' => 'Usuário Desconhecido'];

        if ($lista['id_processo'] == '1') { $cor_da_caixa = "color-success"; $icon_da_caixa = "<img src='./utils/img/icons/check.svg' width='20'>"; } 
        else if ($lista['id_processo'] == '2') { $cor_da_caixa = "color-info"; $icon_da_caixa = "<img src='./utils/img/icons/right-arrow.svg' width='20'>"; } 
        else if ($lista['id_processo'] == '3') { $cor_da_caixa = "color-indigo"; $icon_da_caixa = "<img src='./utils/img/icons/archive.svg' width='20'>"; } 
        else if ($lista['id_processo'] == '4') { $cor_da_caixa = "color-secondary"; $icon_da_caixa = "<img src='./utils/img/icons/vendedor.svg' width='20'>"; } 
        else if ($lista['id_processo'] == '5') { $cor_da_caixa = "color-warning"; $icon_da_caixa = "<img src='./utils/img/icons/shuffle.svg' width='20'>"; } 
        else if ($lista['id_processo'] == '6') { $cor_da_caixa = "color-orange"; $icon_da_caixa = "<img src='./utils/img/icons/stock.svg' width='20'>"; } 
        else if ($lista['id_processo'] == '8') { $cor_da_caixa = "color-danger"; $icon_da_caixa = "<img src='./utils/img/icons/refresh.svg' width='20'>"; }

        $date1 = new DateTime(date("Y-m-d H:i:s"));
        $date2 = new DateTime($lista['ddt']);
        $diff = $date2->diff($date1);
        $mensagem_data = "Há ".$diff->format('%h:%i:%s');

        $date1_ = strtotime(date("Y-m-d H:i:s"));
        $date2_ = strtotime($lista['ddt']);
        $diff_ = ($date1_ - $date2_);
        array_push($array_times, array('id' => $lista['id'], 'processo' => $lista['id_processo'], 'time' => $diff_));

        $class_alert = $diff_ >= 300 ? "btn-pulse" : "";

        $result .= '<div class="col-12 col-sm-12 col-md-6 col-lg-4 col-xl-4">';
        $result .= '<div class="card '. $class_alert .' '. $cor_da_caixa .'" id="card-'.$lista['id'].'" style="margin-bottom: 20px;"';

        $on_click_card = 'if(event.target.closest(\'.botao-imprimir\')) return; popularModal(this,'.$lista['id'].');';
        $result .= ' data-toggle="modal" onClick="'.$on_click_card.'"';

        if ($lista['id_processo'] == '1' && (in_array($loja_id, $lojas_com_boqueta_e_estoque) || $loja_id == 'todas')) { $result .= "data-target='#modal1' data-active='1' data-senha='#drop_senha_1' data-perfil='0'"; } 
        else if ($lista['id_processo'] == '1') { $result .= "data-target='#modal2' data-active='1' data-senha='#drop_senha_3' data-perfil='0'"; } 
        else if ($lista['id_processo'] == '2') { $result .= "data-target='#modal2' data-active='2' data-senha='#drop_senha_3' data-perfil='1'"; } 
        else if ($lista['id_processo'] == '3') { $result .= "data-target='#modal3' data-active='2' data-senha='#drop_senha_4' data-perfil='0'"; } 
        else if ($lista['id_processo'] == '4') { $result .= "data-target='#modal4' data-active='2' data-senha='#drop_senha_5' data-perfil='0'"; } 
        else if ($lista['id_processo'] == '5') { $result .= "data-target='#modal5' data-active='2' data-senha='#drop_senha_7' data-perfil='0'"; } 
        else if ($lista['id_processo'] == '6' && (in_array($loja_id, $lojas_com_boqueta_e_estoque)  || $loja_id == 'todas')) { $result .= "data-target='#modal7' data-active='2' data-senha='#drop_senha_8' data-perfil='0'"; } 
        else if ($lista['id_processo'] == '6') { $result .= "data-target='#modal8' data-active='2' data-senha='#drop_senha_9' data-perfil='0'"; } 
        else if ($lista['id_processo'] == '8') { $result .= "data-target='#modal8' data-active='2' data-senha='#drop_senha_9' data-perfil='0'"; }
        $result .= '>';
        
        $result .= '<div class="card-header">'. $icon_da_caixa .'<span class="card_time">'. $mensagem_data .'</span></div>';
        $result .= '<div class="card-body">';
        
        $result_produto_n_encontrado = "";
        $qtd_produto_n_encontrado = 0;

        // Loop nos produtos da memória
        $produtos_deste_card = isset($produtos_por_processo[$lista['id']]) ? $produtos_por_processo[$lista['id']] : [];
        
        if (!empty($produtos_deste_card)) {
            foreach ($produtos_deste_card as $lista_produtos) {
                // Pega dados do produto web da memória
                $getProduto = isset($produtos_web_map[$lista_produtos['id_produto']]) ? $produtos_web_map[$lista_produtos['id_produto']] : null;
                
                if (!$getProduto) continue;

                $qtd = $lista_produtos['qtd_produto'];
                if ($lista_produtos['qtd_retirada'] != null) {
                    $qtd = $lista_produtos['qtd_retirada'];
                    $qtd_produto_n_encontrado++;
                    $result_produto_n_encontrado .= "
                    <p class='text-danger m-0 my-ob-class'><strong>X".($lista_produtos['qtd_produto'] - $lista_produtos['qtd_retirada'])."</strong> &nbsp;
                    <small>".$getProduto['SQL_ICODBUS']." - ".$getProduto['SQL_IDESCRI']."</small>
                    <span class='my-ob-span'>
                        <small class='text-dark'>Informações do início a solicitação: </small> <br>
                        <span  class='text-dark'><b>X".$lista_produtos['qtd_produto']."</b> - ".$getProduto['SQL_ICODBUS']." - ".$getProduto['SQL_IDESCRI']." </span>
                    </span>
                    </p>";
                }

                $cor_texto = ($qtd == 0) ? "text-danger" : "";
                $estoque_loja = isset($getProduto[$__LOJA_STOCK]) ? $getProduto[$__LOJA_STOCK] : '0';

                $result .= "<p class='m-0 ".$cor_texto."'>";
                $result .= "<span data-toggle='tooltip' data-placement='top' title='DEPÓSITO'>DEP: ". $getProduto['SQL_ILOCDEP'] ." | QTD: ". $estoque_loja ." | </span>";
                $result .= "<span class='card_qtd' data-toggle='tooltip' data-placement='top' title='QUANTIDADE'>". $qtd ."x</span> - ";
                $result .= "<span data-toggle='tooltip' data-placement='top' title='PRODUTO' class='font-ajus'>".$getProduto['SQL_ICODBUS']." - ".$getProduto['SQL_IDESCRI']."</span>";
                $result .= "</p>";
            }

            if ($qtd_produto_n_encontrado > 0) {
                $result .= "<hr><small class='text-danger'>Produtos não encontrados: </small>$result_produto_n_encontrado";
            }
        }

        $result .= '</div>';
        $result .= '<div class="card-header">'. $getDadosUser['nome'] .'</div>';

        // Atividades
        $atividades_deste_card = isset($atividades_por_processo[$lista['id']]) ? $atividades_por_processo[$lista['id']] : [];
        if (!empty($atividades_deste_card)) {
            foreach ($atividades_deste_card as $lista_Atividade) {
                $nome_atividade = isset($users_map[$lista_Atividade['user_id']]) ? $users_map[$lista_Atividade['user_id']]['nome'] : 'Alguém';
                $result .= '<div class="card-header"><img src="./utils/img/icons/walking.svg" width="20"> '. $nome_atividade .', Foi buscar a(s) peça(s).</div>';
            }
        }

        // Vendedor
        if (isset($vendedor_por_processo[$lista['id']])) {
            $id_vend = $vendedor_por_processo[$lista['id']];
            $nome_vendedor = isset($users_map[$id_vend]) ? $users_map[$id_vend]['nome'] : 'Desconhecido';
            $result .= '<div class="card-header vendedor-info"><b>Vendedor:</b> '. $nome_vendedor .'</div>';
        }

        // Observações
        if (isset($obs_por_processo[$lista['id']])) {
            $listaObs = $obs_por_processo[$lista['id']];
            $result .= '<div class="card-header bg-warning btn-pulse"><b>OBS:</b> '. $listaObs['obs_descricao'] .'</div>';
        }

        if (isset($_SESSION['tipo_user']) && $_SESSION['tipo_user'] == 8) {
            $id_da_solicitacao = $lista['id'];
            $result .= '
                <div class="card-footer bg-transparent border-top-0 p-2">
                    <button class="btn btn-sm btn-light border w-100 botao-imprimir" onclick="imprimirCard(event)">
                        <i class="fas fa-print"></i> Imprimir
                    </button>
                </div>';
        }

        $result .= '</div></div>';
    }
}

$var = array(
  'cards' => $result,
  'total_itens_encontrados' => $contador_total,
  'array_id_processos' => $array_id_processos,
  'array_geral' => $array_geral,
  'array_times' => $array_times
);

echo json_encode($var);
?>