<?php
/**
 * Helper para criar menus de ações
 * Facilita a implementação do sistema de menu de ações
 */

class ActionMenuHelper {
    
    /**
     * Gera o HTML para incluir os arquivos CSS e JS necessários
     */
    public static function includeAssets() {
        return '
        <!-- Sistema de Menu de Ações -->
        <link rel="stylesheet" href="../../assets/css/action-menu.css">
        <script src="../../assets/js/action-menu.js"></script>
        ';
    }
    
    /**
     * Gera o container HTML para o menu
     * @param string $id - ID único para o container
     * @param string $class - Classes CSS adicionais (opcional)
     */
    public static function createContainer($id, $class = 'menu-container') {
        return '<div id="' . htmlspecialchars($id) . '" class="' . htmlspecialchars($class) . '"></div>';
    }
    
    /**
     * Gera o JavaScript para criar o menu
     * @param string $containerId - ID do container
     * @param array $actions - Array de ações
     * @param string $title - Título do menu
     */
    public static function generateJavaScript($containerId, $actions, $title = 'Ações') {
        $jsActions = json_encode($actions, JSON_UNESCAPED_UNICODE);
        return "
        <script>
            document.addEventListener('DOMContentLoaded', function() {
                ActionMenu.create('" . htmlspecialchars($containerId) . "', " . $jsActions . ", '" . htmlspecialchars($title) . "');
            });
        </script>
        ";
    }
    
    /**
     * Cria uma ação de link
     * @param string $text - Texto da ação
     * @param string $href - URL do link
     * @param string $icon - Ícone (classe CSS)
     * @param string $type - Tipo da ação (edit, view, success, warning, danger, secondary, dark)
     * @param string $title - Título (tooltip)
     * @param string $target - Target do link (_blank, _self, etc.)
     */
    public static function createLinkAction($text, $href, $icon = 'mdi mdi-link', $type = '', $title = '', $target = '') {
        return [
            'text' => $text,
            'href' => $href,
            'icon' => $icon,
            'type' => $type,
            'title' => $title,
            'target' => $target
        ];
    }
    
    /**
     * Cria uma ação de botão (onclick)
     * @param string $text - Texto da ação
     * @param string $onclick - Função JavaScript
     * @param string $icon - Ícone (classe CSS)
     * @param string $type - Tipo da ação
     * @param string $title - Título (tooltip)
     */
    public static function createButtonAction($text, $onclick, $icon = 'mdi mdi-cog', $type = '', $title = '') {
        return [
            'text' => $text,
            'onclick' => $onclick,
            'icon' => $icon,
            'type' => $type,
            'title' => $title
        ];
    }
    
    /**
     * Cria um separador
     */
    public static function createSeparator() {
        return ['type' => 'separator'];
    }
    
    /**
     * Renderiza o menu de ações
     * @param string $menuId - ID único do menu
     * @param array $actions - Array de ações
     * @param string $title - Título do menu (opcional)
     * @return string HTML do menu
     */
    public static function renderMenu($menuId, $actions, $title = 'Ações') {
        $html = '<div class="action-menu-wrapper">';
        $html .= '<button class="action-menu-trigger" type="button" onclick="toggleDropdown(this)">';
        $html .= '<i class="mdi mdi-cog"></i>';
        $html .= '</button>';
        $html .= '<div class="action-menu-dropdown">';
        
        foreach ($actions as $action) {
            if ($action['type'] !== 'separator') {
                $actionClass = isset($action['type']) ? $action['type'] : '';
                $icon = $action['icon'] ?? 'mdi mdi-cog';
                $title = $action['title'] ?? '';
                
                if (isset($action['href'])) {
                    $html .= '<a href="' . htmlspecialchars($action['href']) . '" class="action-menu-item ' . $actionClass . '" title="' . htmlspecialchars($title) . '">';
                    $html .= '<i class="' . $icon . '"></i>';
                    $html .= '</a>';
                } else {
                    $html .= '<button type="button" class="action-menu-item ' . $actionClass . '" onclick="' . htmlspecialchars($action['onclick']) . '" title="' . htmlspecialchars($title) . '">';
                    $html .= '<i class="' . $icon . '"></i>';
                    $html .= '</button>';
                }
            }
        }
        
        $html .= '</div>';
        $html .= '</div>';
        
        return $html;
    }
    
    /**
     * Exemplo de menu para rodadas de negócio
     * @param int $idRodada - ID da rodada
     * @param int $idCliente - ID do cliente
     * @param string $dataRodada - Data da rodada
     * @param string $nomeCliente - Nome do cliente
     */
    public static function createRodadaMenu($idRodada, $idCliente, $dataRodada, $nomeCliente) {
        $actions = [
            self::createLinkAction(
                'Editar',
                "formulario_inclusao_alteracao_rodada.php?id_rodada={$idRodada}&id_cliente={$idCliente}",
                'mdi mdi-pencil',
                'edit',
                'Editar dados da rodada'
            ),
            self::createLinkAction(
                'Visualizar',
                "detalhar_rodada.php?id_rodada={$idRodada}",
                'mdi mdi-eye',
                'view',
                'Visualizar detalhes da rodada'
            ),
            self::createLinkAction(
                'Gerenciar',
                "gerenciar_empresas_rodada.php?id_rodada={$idRodada}",
                'mdi mdi-domain',
                'success',
                'Gerenciar empresas da rodada'
            ),
            self::createButtonAction(
                'Lista',
                "imprimirDireto({$idRodada}, '{$dataRodada}', '{$nomeCliente}')",
                'mdi mdi-printer',
                'warning',
                'Imprimir lista de empresas'
            ),
            self::createButtonAction(
                'Mesa',
                "imprimirMesa({$idRodada})",
                'mdi mdi-table',
                'dark',
                'Imprimir mesa específica'
            ),
            self::createButtonAction(
                'Espelho',
                "imprimirEspelho({$idRodada}, '{$dataRodada}', '{$nomeCliente}')",
                'mdi mdi-printer-settings',
                'secondary',
                'Imprimir espelho da rodada'
            ),
            self::createButtonAction(
                'Excluir',
                "confirmarExclusao({$idRodada}, {$idCliente})",
                'mdi mdi-delete',
                'danger',
                'Excluir rodada'
            )
        ];
        
        return $actions;
    }
    
    /**
     * Exemplo de menu para clientes
     * @param int $idCliente - ID do cliente
     */
    public static function createClienteMenu($idCliente) {
        $actions = [
            self::createLinkAction(
                'Editar',
                "formulario_inclusao_alteracao_cliente.php?id={$idCliente}",
                'mdi mdi-pencil',
                'edit',
                'Editar dados do cliente'
            ),
            self::createLinkAction(
                'Visualizar',
                "detalhar_cliente.php?id_cliente={$idCliente}",
                'mdi mdi-eye',
                'view',
                'Visualizar detalhes do cliente'
            ),
            self::createLinkAction(
                'Rodadas',
                "rodadas_cliente.php?id_cliente={$idCliente}",
                'mdi mdi-briefcase',
                'success',
                'Ver rodadas de negócio do cliente'
            ),
            self::createButtonAction(
                'Excluir',
                "confirmarExclusaoCliente({$idCliente})",
                'mdi mdi-delete',
                'danger',
                'Excluir cliente'
            )
        ];
        
        return $actions;
    }
    
    /**
     * Exemplo de menu para empresas
     * @param int $idEmpresa - ID da empresa
     */
    public static function createEmpresaMenu($idEmpresa) {
        $actions = [
            self::createLinkAction(
                'Editar',
                "formulario_inclusao_alteracao_filial.php?id={$idEmpresa}",
                'mdi mdi-pencil',
                'edit',
                'Editar dados da empresa'
            ),
            self::createLinkAction(
                'Visualizar',
                "detalhar_filial.php?id_filial={$idEmpresa}",
                'mdi mdi-eye',
                'view',
                'Visualizar detalhes da empresa'
            ),
            self::createButtonAction(
                'Excluir',
                "confirmarExclusaoEmpresa({$idEmpresa})",
                'mdi mdi-delete',
                'danger',
                'Excluir empresa'
            )
        ];
        
        return $actions;
    }
    
    /**
     * Exemplo de menu para empresas da rodada
     * @param int $idRodadaEmpresa - ID da empresa na rodada
     * @param int $posicao - Posição na mesa
     */
    public static function createEmpresaRodadaMenu($idRodadaEmpresa, $posicao) {
        $actions = [
            self::createButtonAction(
                'Editar',
                "editarEmpresa({$idRodadaEmpresa})",
                'mdi mdi-pencil',
                'edit',
                'Editar empresa'
            ),
            self::createButtonAction(
                'Remover',
                "removerEmpresa({$idRodadaEmpresa}, {$posicao})",
                'mdi mdi-delete',
                'delete',
                'Remover empresa da rodada'
            )
        ];
        
        return $actions;
    }
    
    /**
     * Exemplo de menu para funções
     * @param int $idFuncao - ID da função
     */
    public static function createFuncaoMenu($idFuncao) {
        $actions = [
            self::createLinkAction(
                'Editar',
                "inclusao_alteracao.php?id={$idFuncao}",
                'mdi mdi-pencil',
                'edit',
                'Editar dados da função'
            ),
            self::createLinkAction(
                'Visualizar',
                "detalhar.php?id={$idFuncao}",
                'mdi mdi-eye',
                'view',
                'Visualizar detalhes da função'
            )
        ];
        
        return $actions;
    }
    
    /**
     * Exemplo de menu para segmentos
     * @param int $idSegmento - ID do segmento
     */
    public static function createSegmentoMenu($idSegmento) {
        $actions = [
            self::createLinkAction(
                'Editar',
                "formulario_inclusao_alteracao_segmento.php?id={$idSegmento}",
                'mdi mdi-pencil',
                'edit',
                'Editar dados do segmento'
            ),
            self::createLinkAction(
                'Visualizar',
                "detalhar_segmento.php?id_segmento={$idSegmento}",
                'mdi mdi-eye',
                'view',
                'Visualizar detalhes do segmento'
            )
        ];
        
        return $actions;
    }
    
    /**
     * Exemplo de menu para perfis
     * @param int $idPerfil - ID do perfil
     */
    public static function createPerfilMenu($idPerfil) {
        $actions = [
            self::createLinkAction(
                'Editar',
                "inclusao_alteracao.php?id={$idPerfil}",
                'mdi mdi-pencil',
                'edit',
                'Editar dados do perfil'
            ),
            self::createLinkAction(
                'Visualizar',
                "detalhar_perfil.php?id={$idPerfil}",
                'mdi mdi-eye',
                'view',
                'Visualizar detalhes do perfil'
            ),
            self::createButtonAction(
                'Excluir',
                "confirmarExclusao({$idPerfil})",
                'mdi mdi-delete',
                'delete',
                'Excluir perfil'
            )
        ];
        
        return $actions;
    }
    
    /**
     * Exemplo de menu para módulos
     * @param int $idModulo - ID do módulo
     */
    public static function createModuloMenu($idModulo) {
        $actions = [
            self::createLinkAction(
                'Editar',
                "inclusao_alteracao.php?id={$idModulo}",
                'mdi mdi-pencil',
                'edit',
                'Editar dados do módulo'
            ),
            self::createButtonAction(
                'Excluir',
                "confirmarExclusao({$idModulo})",
                'mdi mdi-delete',
                'delete',
                'Excluir módulo'
            )
        ];
        
        return $actions;
    }
    
    /**
     * Exemplo de menu para usuários
     * @param int $idUsuario - ID do usuário
     * @param string $situacao - Situação atual do usuário (A = Ativo, I = Inativo)
     */
    public static function createUsuarioMenu($idUsuario, $situacao = 'A') {
        $actions = [
            self::createLinkAction(
                'Editar',
                "formulario_inclusao_alteracao_usuario.php?id=1&id_pessoa={$idUsuario}",
                'mdi mdi-pencil',
                'edit',
                'Editar dados do usuário'
            ),
            self::createLinkAction(
                'Visualizar',
                "detalhar_usuario.php?&id_pessoa={$idUsuario}",
                'mdi mdi-eye',
                'view',
                'Visualizar detalhes do usuário'
            ),
            self::createButtonAction(
                ($situacao == 'A') ? 'Desativar' : 'Ativar',
                "toggleStatus({$idUsuario})",
                'mdi mdi-' . (($situacao == 'A') ? 'account-off' : 'account-check'),
                ($situacao == 'A') ? 'warning' : 'success',
                ($situacao == 'A') ? 'Desativar usuário' : 'Ativar usuário'
            )
        ];
        
        return $actions;
    }
}

// Exemplo de uso:
/*
// 1. Incluir os assets no head da página
echo ActionMenuHelper::includeAssets();

// 2. Na tabela, criar o container
echo ActionMenuHelper::createContainer('menu-rodada-' . $row['id_rodada_negocio']);

// 3. Gerar o JavaScript para criar o menu
$actions = ActionMenuHelper::createRodadaMenu(
    $row['id_rodada_negocio'],
    $idCliente,
    date('d/m/Y', strtotime($row['data_rodada'])),
    $cliente['razao_social']
);
echo ActionMenuHelper::generateJavaScript('menu-rodada-' . $row['id_rodada_negocio'], $actions, 'Ações da Rodada');

// Ou usar o método renderMenu para fazer tudo de uma vez:
ActionMenuHelper::renderMenu(
    'menu-rodada-' . $row['id_rodada_negocio'],
    ActionMenuHelper::createRodadaMenu($row['id_rodada_negocio'], $idCliente, $dataRodada, $nomeCliente),
    'Ações da Rodada'
);
*/
?>
