<?php
require_once 'includes/funcoes.php';
include 'includes/header.php';

$pdo = conectarBanco();
$empresa_id = isset($_GET['empresa_id']) ? (int)$_GET['empresa_id'] : 0;

// Buscar empresas ativas
$empresas = $pdo->query("SELECT id, nome, ambiente FROM empresas WHERE ativo = 1 ORDER BY nome")->fetchAll(PDO::FETCH_ASSOC);

// Se não tem empresa selecionada e tem empresas, pega a primeira
if ($empresa_id == 0 && count($empresas) > 0) {
    $empresa_id = $empresas[0]['id'];
}

// Buscar serviços da empresa selecionada
$servicos = [];
if ($empresa_id > 0) {
    $stmt = $pdo->prepare("
        SELECT * FROM empresa_servicos 
        WHERE empresa_id = ? 
        ORDER BY codigo
    ");
    $stmt->execute([$empresa_id]);
    $servicos = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
?>

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Gerenciar Serviços - Multi Empresa</title>

    <style>
        .card-shadow { box-shadow: 0 2px 4px rgba(0,0,0,0.1); }
        .table-actions { white-space: nowrap; }
        .modal-lg-custom { max-width: 800px; }
        .status-badge { padding: 3px 8px; border-radius: 12px; font-size: 11px; }
        .status-ativo { background-color: #d4edda; color: #155724; }
        .status-inativo { background-color: #f8d7da; color: #721c24; }
        .select-all-row { background-color: #f8f9fa; cursor: pointer; }
        .select-all-row:hover { background-color: #e9ecef; }
        
        /* CORREÇÃO: Estilos para os botões do SweetAlert não sumirem no hover */
        .swal2-confirm.swal2-styled:hover {
            background-color: #d33 !important;
            opacity: 0.9;
            transform: none;
        }
        
        .swal2-cancel.swal2-styled:hover {
            background-color: #3085d6 !important;
            opacity: 0.9;
            transform: none;
        }
        
        .swal2-styled {
            transition: none !important;
        }
        
        /* Garantir que o botão de excluir múltiplos fique visível */
        #btnExcluirMultiplos {
            transition: none;
        }
        
        #btnExcluirMultiplos:hover {
            background-color: #dc3545;
            opacity: 0.9;
        }
    </style>
</head>
<body>

<div class="container-fluid mt-3">
    <!-- Header -->
    <div class="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom">
        <h1><i class="bi bi-grid-3x3-gap-fill"></i> Gerenciar Serviços</h1>
        <div>
            <button class="btn btn-primary" onclick="abrirModalNovo()">
                <i class="bi bi-plus-circle"></i> Novo Serviço
            </button>
            <button class="btn btn-danger" id="btnExcluirMultiplos" onclick="excluirMultiplos()" style="display: none;">
                <i class="bi bi-trash3"></i> Excluir Selecionados (<span id="contSelecionados">0</span>)
            </button>
            <button class="btn btn-outline-secondary" onclick="exportarServicos()">
                <i class="bi bi-download"></i> Exportar
            </button>
        </div>
    </div>

    <!-- Seletor de Empresa (Filtro) -->
    <div class="card card-shadow mb-4">
        <div class="card-header bg-info text-white">
            <strong><i class="bi bi-funnel"></i> Filtrar por Empresa</strong>
        </div>
        <div class="card-body">
            <div class="row">
                <div class="col-md-12">
                    <select class="form-select" id="empresaSelect" onchange="mudarEmpresa()">
                        <option value="">Todas as empresas</option>
                        <?php foreach ($empresas as $emp): ?>
                        <option value="<?php echo $emp['id']; ?>" <?php echo $empresa_id == $emp['id'] ? 'selected' : ''; ?>>
                            <?php echo htmlspecialchars($emp['nome']); ?>
                            <span class="badge <?php echo $emp['ambiente'] == 'producao' ? 'bg-danger' : 'bg-warning'; ?>">
                                <?php echo $emp['ambiente']; ?>
                            </span>
                        </option>
                        <?php endforeach; ?>
                    </select>
                </div>
            </div>
        </div>
    </div>

    <!-- Lista de Serviços -->
    <div class="card card-shadow">
        <div class="card-header bg-success text-white d-flex justify-content-between align-items-center">
            <div>
                <strong><i class="bi bi-list-ul"></i> Serviços Cadastrados</strong>
                <span class="badge bg-light text-dark ms-2" id="totalServicos">0</span>
            </div>
            <div class="form-check">
                <input class="form-check-input" type="checkbox" id="selecionarTodos" style="cursor: pointer;">
                <label class="form-check-label text-white" for="selecionarTodos" style="cursor: pointer;">
                    Selecionar Todos
                </label>
            </div>
        </div>
        <div class="card-body">
            <div class="table-responsive">
                <table id="tabelaServicos" class="table table-striped table-hover">
                    <thead>
                        <tr>
                            <th width="40">
                                <input type="checkbox" id="selecionarTodosCabecalho" style="cursor: pointer;">
                            </th>
                            <th>Código</th>
                            <th>Descrição</th>
                            <th>Empresa</th>
                            <th>CNAE</th>
                            <th>Alíquota ISS</th>
                            <th>Tributação</th>
                            <th>Status</th>
                            <th>Ações</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php foreach ($servicos as $servico): 
                            // Buscar nome da empresa
                            $stmtEmp = $pdo->prepare("SELECT nome FROM empresas WHERE id = ?");
                            $stmtEmp->execute([$servico['empresa_id']]);
                            $empresaNome = $stmtEmp->fetchColumn();
                        ?>
                        <tr id="servico_<?php echo $servico['id']; ?>" data-id="<?php echo $servico['id']; ?>">
                            <td>
                                <input type="checkbox" class="checkbox-selecionar" value="<?php echo $servico['id']; ?>" style="cursor: pointer;">
                            </td>
                            <td><?php echo htmlspecialchars($servico['codigo']); ?></td>
                            <td><?php echo htmlspecialchars(substr($servico['descricao'], 0, 100)); ?></td>
                            <td><?php echo htmlspecialchars($empresaNome); ?></td>
                            <td><?php echo htmlspecialchars($servico['cnae'] ?? '-'); ?></td>
                            <td><?php echo $servico['aliquota_iss'] ? number_format($servico['aliquota_iss'], 2) . '%' : '-'; ?></td>
                            <td>
                                <span class="badge bg-<?php echo $servico['tributacao'] == 'simples' ? 'info' : ($servico['tributacao'] == 'normal' ? 'primary' : 'secondary'); ?>">
                                    <?php echo ucfirst($servico['tributacao']); ?>
                                </span>
                            </td>
                            <td>
                                <span class="status-badge status-<?php echo $servico['status']; ?>">
                                    <?php echo $servico['status'] == 'ativo' ? 'Ativo' : 'Inativo'; ?>
                                </span>
                            </td>
                            <td class="table-actions">
                                <button class="btn btn-sm btn-warning" onclick="editarServico(<?php echo $servico['id']; ?>)">
                                    <i class="bi bi-pencil"></i>
                                </button>
                                <button class="btn btn-sm btn-danger" onclick="excluirServico(<?php echo $servico['id']; ?>)">
                                    <i class="bi bi-trash"></i>
                                </button>
                                <button class="btn btn-sm btn-info" onclick="toggleStatus(<?php echo $servico['id']; ?>, '<?php echo $servico['status']; ?>')">
                                    <i class="bi bi-<?php echo $servico['status'] == 'ativo' ? 'eye-slash' : 'eye'; ?>"></i>
                                </button>
                            </td>
                        </tr>
                        <?php endforeach; ?>
                    </tbody>
                </table>
            </div>
        </div>
    </div>
</div>

<!-- Modal de Cadastro/Edição -->
<div class="modal fade" id="modalServico" tabindex="-1">
    <div class="modal-dialog modal-lg-custom modal-lg">
        <div class="modal-content">
            <div class="modal-header bg-primary text-white">
                <h5 class="modal-title" id="modalTitulo">
                    <i class="bi bi-plus-circle"></i> Novo Serviço
                </h5>
                <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
            </div>
            <form id="formServico" method="POST">
                <div class="modal-body">
                    <input type="hidden" id="servico_id" name="servico_id">
                    
                    <div class="row">
                        <div class="col-md-12 mb-3">
                            <label class="form-label required-field"><i class="bi bi-building"></i> Empresa *</label>
                            <select class="form-select" id="empresa_id" name="empresa_id" required>
                                <option value="">Selecione a empresa</option>
                                <?php foreach ($empresas as $emp): ?>
                                <option value="<?php echo $emp['id']; ?>">
                                    <?php echo htmlspecialchars($emp['nome']); ?>
                                    <span class="badge <?php echo $emp['ambiente'] == 'producao' ? 'bg-danger' : 'bg-warning'; ?>">
                                        <?php echo $emp['ambiente']; ?>
                                    </span>
                                </option>
                                <?php endforeach; ?>
                            </select>
                            <small class="text-muted">Selecione a empresa que este serviço pertence</small>
                        </div>
                    </div>
                    
                    <div class="row">
                        <div class="col-md-6 mb-3">
                            <label class="form-label required-field">Código do Serviço *</label>
                            <input type="text" class="form-control" id="codigo" name="codigo" required 
                                   placeholder="Ex: 3811400 ou 010701">
                            <small class="text-muted">Código do serviço (CNAE ou LC 116)</small>
                        </div>
                        
                        <div class="col-md-6 mb-3">
                            <label class="form-label">CNAE (opcional)</label>
                            <input type="text" class="form-control" id="cnae" name="cnae" 
                                   placeholder="Ex: 38.11-4-00">
                        </div>
                    </div>
                    
                    <div class="mb-3">
                        <label class="form-label required-field">Descrição do Serviço *</label>
                        <textarea class="form-control" id="descricao" name="descricao" rows="3" required 
                                  placeholder="Descreva detalhadamente o serviço"></textarea>
                    </div>
                    
                    <div class="row">
                        <div class="col-md-4 mb-3">
                            <label class="form-label">Alíquota ISS (%)</label>
                            <input type="number" step="0.01" class="form-control" id="aliquota_iss" name="aliquota_iss" 
                                   placeholder="Ex: 2.00">
                        </div>
                        
                        <div class="col-md-4 mb-3">
                            <label class="form-label">Tipo de Tributação</label>
                            <select class="form-select" id="tributacao" name="tributacao">
                                <option value="simples">Simples Nacional</option>
                                <option value="normal">Normal (ISS)</option>
                                <option value="isento">Isento</option>
                                <option value="imune">Imune</option>
                            </select>
                        </div>
                        
                        <div class="col-md-4 mb-3">
                            <label class="form-label">Status</label>
                            <select class="form-select" id="status" name="status">
                                <option value="ativo">Ativo</option>
                                <option value="inativo">Inativo</option>
                            </select>
                        </div>
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancelar</button>
                    <button type="submit" class="btn btn-primary">
                        <i class="bi bi-save"></i> Salvar
                    </button>
                </div>
            </form>
        </div>
    </div>
</div>

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.datatables.net/1.11.5/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/1.11.5/js/dataTables.bootstrap5.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>

<script>
let dataTable;
let idsSelecionados = [];

$(document).ready(function() {
    // Inicializar DataTable
    dataTable = $('#tabelaServicos').DataTable({
        language: {
            url: '//cdn.datatables.net/plug-ins/1.11.5/i18n/pt-BR.json'
        },
        order: [[1, 'asc']],
        pageLength: 25,
        columnDefs: [
            { orderable: false, targets: [0, 8] }
        ]
    });
    
    atualizarTotal();
    atualizarBotaoExcluirMultiplos();
    
    // Submit do formulário
    $('#formServico').submit(function(e) {
        e.preventDefault();
        salvarServico();
    });
    
    // Evento: selecionar todos os checkboxes
    $('#selecionarTodos, #selecionarTodosCabecalho').on('change', function() {
        var isChecked = $(this).prop('checked');
        $('.checkbox-selecionar').prop('checked', isChecked);
        atualizarSelecionados();
    });
    
    // Evento: mudança em qualquer checkbox individual
    $(document).on('change', '.checkbox-selecionar', function() {
        atualizarSelecionados();
        
        var totalCheckboxes = $('.checkbox-selecionar').length;
        var checkboxesMarcados = $('.checkbox-selecionar:checked').length;
        
        if (checkboxesMarcados === 0) {
            $('#selecionarTodos, #selecionarTodosCabecalho').prop('checked', false).prop('indeterminate', false);
        } else if (checkboxesMarcados === totalCheckboxes) {
            $('#selecionarTodos, #selecionarTodosCabecalho').prop('checked', true).prop('indeterminate', false);
        } else {
            $('#selecionarTodos, #selecionarTodosCabecalho').prop('checked', false).prop('indeterminate', true);
        }
    });
});

function mudarEmpresa() {
    var empresaId = $('#empresaSelect').val();
    if (empresaId) {
        window.location.href = 'servicos_gerenciar.php?empresa_id=' + empresaId;
    } else {
        window.location.href = 'servicos_gerenciar.php';
    }
}

function atualizarSelecionados() {
    idsSelecionados = [];
    $('.checkbox-selecionar:checked').each(function() {
        idsSelecionados.push($(this).val());
    });
    atualizarBotaoExcluirMultiplos();
}

function atualizarBotaoExcluirMultiplos() {
    var count = idsSelecionados.length;
    $('#contSelecionados').text(count);
    
    if (count > 0) {
        $('#btnExcluirMultiplos').show();
    } else {
        $('#btnExcluirMultiplos').hide();
    }
}

function excluirMultiplos() {
    if (idsSelecionados.length === 0) {
        Swal.fire('Atenção', 'Selecione pelo menos um serviço para excluir', 'warning');
        return;
    }
    
    Swal.fire({
        title: 'Tem certeza?',
        html: `Você está prestes a excluir <strong>${idsSelecionados.length}</strong> serviço(s).<br>Esta ação não poderá ser desfeita!`,
        icon: 'warning',
        showCancelButton: true,
        confirmButtonColor: '#d33',
        cancelButtonColor: '#3085d6',
        confirmButtonText: `Sim, excluir ${idsSelecionados.length} serviço(s)!`,
        cancelButtonText: 'Cancelar',
        focusConfirm: false,
        focusCancel: true
    }).then((result) => {
        if (result.isConfirmed) {
            Swal.fire({
                title: 'Excluindo...',
                text: 'Aguarde enquanto excluímos os serviços',
                allowOutsideClick: false,
                didOpen: () => {
                    Swal.showLoading();
                }
            });
            
            $.ajax({
                url: 'api/servicos_api.php',
                method: 'POST',
                data: JSON.stringify({
                    action: 'delete_multiple',
                    ids: idsSelecionados
                }),
                contentType: 'application/json',
                dataType: 'json',
                success: function(response) {
                    Swal.close();
                    if (response.sucesso) {
                        Swal.fire('Sucesso!', response.mensagem, 'success');
                        setTimeout(() => location.reload(), 1500);
                    } else {
                        Swal.fire('Erro!', response.erro, 'error');
                    }
                },
                error: function(xhr) {
                    Swal.close();
                    console.error(xhr.responseText);
                    Swal.fire('Erro!', 'Erro ao excluir os serviços. Verifique o console.', 'error');
                }
            });
        }
    });
}

function abrirModalNovo() {
    $('#modalTitulo').html('<i class="bi bi-plus-circle"></i> Novo Serviço');
    $('#formServico')[0].reset();
    $('#servico_id').val('');
    $('#codigo').prop('readonly', false);
    $('#empresa_id').prop('disabled', false).val('');
    $('#modalServico').modal('show');
}

function editarServico(id) {
    $.ajax({
        url: 'api/servicos_api.php',
        method: 'GET',
        data: { action: 'get', id: id },
        dataType: 'json',
        success: function(response) {
            if (response.sucesso) {
                $('#modalTitulo').html('<i class="bi bi-pencil"></i> Editar Serviço');
                $('#servico_id').val(response.dados.id);
                $('#codigo').val(response.dados.codigo).prop('readonly', true);
                $('#descricao').val(response.dados.descricao);
                $('#cnae').val(response.dados.cnae);
                $('#aliquota_iss').val(response.dados.aliquota_iss);
                $('#tributacao').val(response.dados.tributacao);
                $('#status').val(response.dados.status);
                $('#empresa_id').val(response.dados.empresa_id).prop('disabled', true);
                $('#modalServico').modal('show');
            } else {
                Swal.fire('Erro', response.erro, 'error');
            }
        },
        error: function() {
            Swal.fire('Erro', 'Não foi possível carregar o serviço', 'error');
        }
    });
}

function salvarServico() {
    if (!$('#empresa_id').val()) {
        Swal.fire('Erro', 'Selecione a empresa para este serviço', 'error');
        return;
    }
    
    var dados = {
        action: $('#servico_id').val() ? 'update' : 'create',
        servico_id: $('#servico_id').val(),
        empresa_id: $('#empresa_id').val(),
        codigo: $('#codigo').val(),
        descricao: $('#descricao').val(),
        cnae: $('#cnae').val(),
        aliquota_iss: $('#aliquota_iss').val(),
        tributacao: $('#tributacao').val(),
        status: $('#status').val()
    };
    
    $.ajax({
        url: 'api/servicos_api.php',
        method: 'POST',
        data: JSON.stringify(dados),
        contentType: 'application/json',
        dataType: 'json',
        beforeSend: function() {
            Swal.fire({
                title: 'Salvando...',
                allowOutsideClick: false,
                didOpen: () => {
                    Swal.showLoading();
                }
            });
        },
        success: function(response) {
            Swal.close();
            if (response.sucesso) {
                Swal.fire('Sucesso', response.mensagem, 'success');
                $('#modalServico').modal('hide');
                var empresaFiltro = $('#empresaSelect').val();
                if (empresaFiltro) {
                    setTimeout(() => window.location.href = 'servicos_gerenciar.php?empresa_id=' + empresaFiltro, 1500);
                } else {
                    setTimeout(() => location.reload(), 1500);
                }
            } else {
                Swal.fire('Erro', response.erro, 'error');
            }
        },
        error: function() {
            Swal.close();
            Swal.fire('Erro', 'Erro ao salvar serviço', 'error');
        }
    });
}

function excluirServico(id) {
    Swal.fire({
        title: 'Tem certeza?',
        text: "Esta ação não poderá ser desfeita!",
        icon: 'warning',
        showCancelButton: true,
        confirmButtonColor: '#d33',
        cancelButtonColor: '#3085d6',
        confirmButtonText: 'Sim, excluir!',
        cancelButtonText: 'Cancelar'
    }).then((result) => {
        if (result.isConfirmed) {
            $.ajax({
                url: 'api/servicos_api.php',
                method: 'POST',
                data: JSON.stringify({
                    action: 'delete',
                    servico_id: id
                }),
                contentType: 'application/json',
                dataType: 'json',
                success: function(response) {
                    if (response.sucesso) {
                        Swal.fire('Excluído!', response.mensagem, 'success');
                        setTimeout(() => location.reload(), 1500);
                    } else {
                        Swal.fire('Erro', response.erro, 'error');
                    }
                },
                error: function() {
                    Swal.fire('Erro', 'Erro ao excluir serviço', 'error');
                }
            });
        }
    });
}

function toggleStatus(id, statusAtual) {
    var novoStatus = statusAtual == 'ativo' ? 'inativo' : 'ativo';
    var acao = novoStatus == 'ativo' ? 'ativar' : 'desativar';
    
    Swal.fire({
        title: `${acao.charAt(0).toUpperCase() + acao.slice(1)} serviço?`,
        text: `Deseja ${acao} este serviço?`,
        icon: 'question',
        showCancelButton: true,
        confirmButtonText: `Sim, ${acao}`,
        cancelButtonText: 'Cancelar'
    }).then((result) => {
        if (result.isConfirmed) {
            $.ajax({
                url: 'api/servicos_api.php',
                method: 'POST',
                data: JSON.stringify({
                    action: 'toggle_status',
                    servico_id: id,
                    status: novoStatus
                }),
                contentType: 'application/json',
                dataType: 'json',
                success: function(response) {
                    if (response.sucesso) {
                        Swal.fire('Sucesso', response.mensagem, 'success');
                        setTimeout(() => location.reload(), 1500);
                    } else {
                        Swal.fire('Erro', response.erro, 'error');
                    }
                },
                error: function() {
                    Swal.fire('Erro', 'Erro ao alterar status', 'error');
                }
            });
        }
    });
}

function exportarServicos() {
    var empresaId = $('#empresaSelect').val();
    if (!empresaId) {
        Swal.fire('Atenção', 'Selecione uma empresa primeiro', 'warning');
        return;
    }
    
    window.location.href = `api/servicos_api.php?action=export&empresa_id=${empresaId}`;
}

function atualizarTotal() {
    var total = $('#tabelaServicos tbody tr').length;
    $('#totalServicos').text(total);
}
</script>

<?php include 'includes/footer.php'; ?>