<?php
// includes/funcoes.php

function conectarBanco() {
    $dbConfig = require __DIR__ . '/../db_config.php';
    
    try {
        $pdo = new PDO(
            "mysql:host={$dbConfig['host']};dbname={$dbConfig['dbname']};charset=utf8mb4",
            $dbConfig['user'],
            $dbConfig['pass']
        );
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        return $pdo;
    } catch (PDOException $e) {
        return null;
    }
}

function retornarJson($dados, $statusCode = 200) {
    http_response_code($statusCode);
    header('Content-Type: application/json');
    echo json_encode($dados, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
    exit;
}

function sanitizar($input) {
    return htmlspecialchars(trim($input), ENT_QUOTES, 'UTF-8');
}

function formatarCnpj($cnpj) {
    $cnpj = preg_replace('/[^0-9]/', '', $cnpj);
    if (strlen($cnpj) == 14) {
        return substr($cnpj, 0, 2) . '.' . substr($cnpj, 2, 3) . '.' . substr($cnpj, 5, 3) . '/' . substr($cnpj, 8, 4) . '-' . substr($cnpj, 12, 2);
    }
    return $cnpj;
}

function formatarCpf($cpf) {
    $cpf = preg_replace('/[^0-9]/', '', $cpf);
    if (strlen($cpf) == 11) {
        return substr($cpf, 0, 3) . '.' . substr($cpf, 3, 3) . '.' . substr($cpf, 6, 3) . '-' . substr($cpf, 9, 2);
    }
    return $cpf;
}

function formatarTelefone($telefone) {
    $telefone = preg_replace('/[^0-9]/', '', $telefone);
    if (strlen($telefone) == 11) {
        return '(' . substr($telefone, 0, 2) . ') ' . substr($telefone, 2, 5) . '-' . substr($telefone, 7, 4);
    } elseif (strlen($telefone) == 10) {
        return '(' . substr($telefone, 0, 2) . ') ' . substr($telefone, 2, 4) . '-' . substr($telefone, 6, 4);
    }
    return $telefone;
}

function formatarCep($cep) {
    $cep = preg_replace('/[^0-9]/', '', $cep);
    if (strlen($cep) == 8) {
        return substr($cep, 0, 5) . '-' . substr($cep, 5, 3);
    }
    return $cep;
}

function buscarServicosComCache($pdo, $empresa_id, $codigo_municipio, $token, $ambiente) {
    // Verificar cache (válido por 7 dias)
    $stmt = $pdo->prepare("
        SELECT servicos, data_busca 
        FROM cache_servicos_municipio 
        WHERE empresa_id = ? AND codigo_municipio = ? 
        AND data_busca > DATE_SUB(NOW(), INTERVAL 7 DAY)
    ");
    $stmt->execute([$empresa_id, $codigo_municipio]);
    $cache = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if ($cache) {
        return json_decode($cache['servicos'], true);
    }
    
    // Buscar da API (você precisa implementar esta função)
    $itens = buscarItensListaServico($token, $codigo_municipio, $ambiente);
    
    if ($itens) {
        // Salvar no cache
        $stmt = $pdo->prepare("
            INSERT INTO cache_servicos_municipio (empresa_id, codigo_municipio, servicos) 
            VALUES (?, ?, ?) 
            ON DUPLICATE KEY UPDATE servicos = ?, data_busca = NOW()
        ");
        $stmt->execute([$empresa_id, $codigo_municipio, json_encode($itens), json_encode($itens)]);
    }
    
    return $itens;
}

// Se você não tiver esta função, adicione ou remova a chamada acima
function buscarItensListaServico($token, $codigo_municipio, $ambiente) {
    $baseUrl = $ambiente == 'producao' 
        ? 'https://api.focusnfe.com.br/v2' 
        : 'https://homologacao.focusnfe.com.br/v2';
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $baseUrl . '/nfse/itens_lista_servico');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Authorization: Basic ' . base64_encode($token . ':')
    ]);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    
    $resposta = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    
    if ($httpCode == 200) {
        $dados = json_decode($resposta, true);
        return $dados['itens'] ?? [];
    }
    
    return [];
}