<?php
header('Content-Type: application/json');
ini_set('display_errors', 0);
error_reporting(0);

require_once '../includes/funcoes.php';

$pdo = conectarBanco();
if (!$pdo) {
    retornarJson(['sucesso' => false, 'erro' => 'Erro na conexão com o banco'], 500);
}

// GET requests
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
    $action = $_GET['action'] ?? '';
    
    if ($action === 'get' && isset($_GET['id'])) {
        $stmt = $pdo->prepare("SELECT * FROM empresa_servicos WHERE id = ?");
        $stmt->execute([$_GET['id']]);
        $servico = $stmt->fetch(PDO::FETCH_ASSOC);
        
        if ($servico) {
            retornarJson(['sucesso' => true, 'dados' => $servico]);
        } else {
            retornarJson(['sucesso' => false, 'erro' => 'Serviço não encontrado'], 404);
        }
    }
    
    if ($action === 'export' && isset($_GET['empresa_id'])) {
        $stmt = $pdo->prepare("
            SELECT s.*, e.nome as empresa_nome 
            FROM empresa_servicos s
            JOIN empresas e ON s.empresa_id = e.id
            WHERE s.empresa_id = ? AND s.status = 'ativo'
            ORDER BY s.codigo
        ");
        $stmt->execute([$_GET['empresa_id']]);
        $servicos = $stmt->fetchAll(PDO::FETCH_ASSOC);
        
        header('Content-Type: text/csv; charset=utf-8');
        header('Content-Disposition: attachment; filename="servicos_' . $_GET['empresa_id'] . '_' . date('Ymd') . '.csv"');
        
        $output = fopen('php://output', 'w');
        fputcsv($output, ['Código', 'Descrição', 'CNAE', 'Alíquota ISS', 'Tributação', 'Status']);
        
        foreach ($servicos as $servico) {
            fputcsv($output, [
                $servico['codigo'],
                $servico['descricao'],
                $servico['cnae'],
                $servico['aliquota_iss'],
                $servico['tributacao'],
                $servico['status']
            ]);
        }
        fclose($output);
        exit;
    }
    
    retornarJson(['sucesso' => false, 'erro' => 'Ação inválida'], 400);
}

// POST requests
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $dados = json_decode(file_get_contents('php://input'), true);
    
    if (!$dados || !isset($dados['action'])) {
        retornarJson(['sucesso' => false, 'erro' => 'Dados inválidos'], 400);
    }
    
    $action = $dados['action'];
    
    // Criar serviço
    if ($action === 'create') {
        if (empty($dados['empresa_id']) || empty($dados['codigo']) || empty($dados['descricao'])) {
            retornarJson(['sucesso' => false, 'erro' => 'Campos obrigatórios não preenchidos'], 400);
        }
        
        try {
            $stmt = $pdo->prepare("
                INSERT INTO empresa_servicos (empresa_id, codigo, descricao, cnae, aliquota_iss, tributacao, status)
                VALUES (?, ?, ?, ?, ?, ?, ?)
            ");
            $stmt->execute([
                $dados['empresa_id'],
                $dados['codigo'],
                $dados['descricao'],
                $dados['cnae'] ?? null,
                $dados['aliquota_iss'] ?? null,
                $dados['tributacao'] ?? 'simples',
                $dados['status'] ?? 'ativo'
            ]);
            
            retornarJson(['sucesso' => true, 'mensagem' => 'Serviço criado com sucesso', 'id' => $pdo->lastInsertId()]);
        } catch (PDOException $e) {
            if ($e->errorInfo[1] == 1062) {
                retornarJson(['sucesso' => false, 'erro' => 'Já existe um serviço com este código para esta empresa'], 409);
            }
            retornarJson(['sucesso' => false, 'erro' => 'Erro ao criar serviço: ' . $e->getMessage()], 500);
        }
    }
    
    // Atualizar serviço
    if ($action === 'update') {
        if (empty($dados['servico_id'])) {
            retornarJson(['sucesso' => false, 'erro' => 'ID do serviço não informado'], 400);
        }
        
        try {
            $stmt = $pdo->prepare("
                UPDATE empresa_servicos 
                SET descricao = ?, cnae = ?, aliquota_iss = ?, tributacao = ?, status = ?, updated_at = NOW()
                WHERE id = ?
            ");
            $stmt->execute([
                $dados['descricao'],
                $dados['cnae'] ?? null,
                $dados['aliquota_iss'] ?? null,
                $dados['tributacao'] ?? 'simples',
                $dados['status'] ?? 'ativo',
                $dados['servico_id']
            ]);
            
            retornarJson(['sucesso' => true, 'mensagem' => 'Serviço atualizado com sucesso']);
        } catch (PDOException $e) {
            retornarJson(['sucesso' => false, 'erro' => 'Erro ao atualizar serviço: ' . $e->getMessage()], 500);
        }
    }
    
    // Excluir serviço individual
    if ($action === 'delete') {
        if (empty($dados['servico_id'])) {
            retornarJson(['sucesso' => false, 'erro' => 'ID do serviço não informado'], 400);
        }
        
        try {
            $stmt = $pdo->prepare("DELETE FROM empresa_servicos WHERE id = ?");
            $stmt->execute([$dados['servico_id']]);
            
            retornarJson(['sucesso' => true, 'mensagem' => 'Serviço excluído com sucesso']);
        } catch (PDOException $e) {
            retornarJson(['sucesso' => false, 'erro' => 'Erro ao excluir serviço: ' . $e->getMessage()], 500);
        }
    }
    
    // NOVO: Excluir múltiplos serviços
    if ($action === 'delete_multiple') {
        if (empty($dados['ids']) || !is_array($dados['ids'])) {
            retornarJson(['sucesso' => false, 'erro' => 'Nenhum serviço selecionado'], 400);
        }
        
        try {
            // Validar que os IDs são números
            $ids = array_filter($dados['ids'], 'is_numeric');
            if (empty($ids)) {
                retornarJson(['sucesso' => false, 'erro' => 'IDs inválidos'], 400);
            }
            
            // Criar placeholders para o IN
            $placeholders = implode(',', array_fill(0, count($ids), '?'));
            $stmt = $pdo->prepare("DELETE FROM empresa_servicos WHERE id IN ($placeholders)");
            $stmt->execute($ids);
            
            $total = $stmt->rowCount();
            retornarJson([
                'sucesso' => true, 
                'mensagem' => "{$total} serviço(s) excluído(s) com sucesso"
            ]);
        } catch (PDOException $e) {
            retornarJson(['sucesso' => false, 'erro' => 'Erro ao excluir serviços: ' . $e->getMessage()], 500);
        }
    }
    
    // Alternar status
    if ($action === 'toggle_status') {
        if (empty($dados['servico_id']) || empty($dados['status'])) {
            retornarJson(['sucesso' => false, 'erro' => 'Dados insuficientes'], 400);
        }
        
        try {
            $stmt = $pdo->prepare("UPDATE empresa_servicos SET status = ?, updated_at = NOW() WHERE id = ?");
            $stmt->execute([$dados['status'], $dados['servico_id']]);
            
            $mensagem = $dados['status'] == 'ativo' ? 'Serviço ativado com sucesso' : 'Serviço desativado com sucesso';
            retornarJson(['sucesso' => true, 'mensagem' => $mensagem]);
        } catch (PDOException $e) {
            retornarJson(['sucesso' => false, 'erro' => 'Erro ao alterar status: ' . $e->getMessage()], 500);
        }
    }
    
    // Importar serviços padrão
    if ($action === 'import_default') {
        if (empty($dados['empresa_id'])) {
            retornarJson(['sucesso' => false, 'erro' => 'Empresa não informada'], 400);
        }
        
        $servicosPadrao = [
            ['3811400', 'Coleta de resíduos não-perigosos', '38.11-4-00', 2.00, 'simples'],
            ['3812200', 'Coleta de resíduos perigosos', '38.12-2-00', 2.00, 'simples'],
            ['3821100', 'Tratamento e disposição de resíduos não-perigosos', '38.21-1-00', 2.00, 'simples'],
            ['3822000', 'Tratamento e disposição de resíduos perigosos', '38.22-0-00', 2.00, 'simples'],
            ['3839401', 'Usinas de compostagem', '38.39-4-01', 2.00, 'simples'],
            ['4313400', 'Obras de terraplenagem', '43.13-4-00', 2.00, 'simples'],
            ['4930201', 'Transporte rodoviário de carga municipal', '49.30-2-01', 2.00, 'simples'],
            ['4930202', 'Transporte rodoviário de carga intermunicipal', '49.30-2-02', 2.00, 'simples'],
            ['5212500', 'Carga e descarga', '52.12-5-00', 2.00, 'simples'],
            ['5223100', 'Estacionamento de veículos', '52.23-1-00', 2.00, 'simples'],
            ['8111700', 'Serviços combinados para apoio a edifícios', '81.11-7-00', 2.00, 'simples'],
            ['8121400', 'Limpeza em prédios e domicílios', '81.21-4-00', 2.00, 'simples'],
            ['010701', 'Serviços de Tecnologia da Informação - TIC', null, 2.00, 'simples'],
            ['061001', 'Serviços de consultoria e assessoria', null, 2.00, 'simples'],
            ['170211', 'Serviços de limpeza e conservação', null, 2.00, 'simples']
        ];
        
        $importados = 0;
        $ignorados = 0;
        
        foreach ($servicosPadrao as $servico) {
            try {
                $stmt = $pdo->prepare("
                    INSERT IGNORE INTO empresa_servicos (empresa_id, codigo, descricao, cnae, aliquota_iss, tributacao)
                    VALUES (?, ?, ?, ?, ?, ?)
                ");
                $stmt->execute([
                    $dados['empresa_id'],
                    $servico[0],
                    $servico[1],
                    $servico[2],
                    $servico[3],
                    $servico[4]
                ]);
                
                if ($stmt->rowCount() > 0) {
                    $importados++;
                } else {
                    $ignorados++;
                }
            } catch (Exception $e) {
                $ignorados++;
            }
        }
        
        retornarJson([
            'sucesso' => true,
            'mensagem' => "Importação concluída: {$importados} serviços importados, {$ignorados} já existentes"
        ]);
    }
    
    retornarJson(['sucesso' => false, 'erro' => 'Ação inválida'], 400);
}
?>