/*
* Copyright (c) 2026 RAVAPI Soluções. Todos os direitos reservados.
* www.ravapi.com
*/
using System;
using System.IO;
using System.Reflection;
namespace TechDeskAgent
{
///
/// Lê e salva configurações do arquivo config.ini ao lado do EXE.
/// Pode ser pré-configurado antes do deploy via GPO.
///
public class AgentConfig
{
public const string VERSAO = "1.0.0";
// Caminho do config.ini ao lado do EXE
private static readonly string ConfigPath = Path.Combine(
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
"config.ini"
);
// ── Propriedades ──────────────────────────────────────────────────────
/// URL base da API TechDesk (ex: https://techdesk.ravapi.com/api/monitoramento/)
public string ApiUrl { get; set; } = "https://techdesk.ravapi.com/api/monitoramento/";
/// ID do cliente RAVAPI — pré-configurado antes do deploy
public string ClientId { get; set; } = "";
/// Token gerado no registro inicial — preenchido automaticamente
public string Token { get; set; } = "";
/// Intervalo de coleta em minutos
public int IntervaloMinutos { get; set; } = 15;
// ── Carregamento ──────────────────────────────────────────────────────
public static AgentConfig Load()
{
var cfg = new AgentConfig();
if (!File.Exists(ConfigPath))
{
Logger.Warn($"config.ini não encontrado em {ConfigPath}. Usando padrões.");
cfg.Save(); // cria arquivo com valores padrão
return cfg;
}
foreach (var linha in File.ReadAllLines(ConfigPath))
{
if (linha.StartsWith("#") || !linha.Contains("=")) continue;
var partes = linha.Split(new[] { '=' }, 2);
var chave = partes[0].Trim();
var valor = partes[1].Trim();
switch (chave.ToLower())
{
case "api_url": cfg.ApiUrl = valor; break;
case "client_id": cfg.ClientId = valor; break;
case "token": cfg.Token = valor; break;
case "intervalo_minutos":
if (int.TryParse(valor, out var mins)) cfg.IntervaloMinutos = mins;
break;
}
}
return cfg;
}
// ── Persistência ──────────────────────────────────────────────────────
public void Save()
{
File.WriteAllText(ConfigPath,
$@"# TechDesk Agent — Configuracao
# Copyright (c) 2026 RAVAPI Solucoes. www.ravapi.com
# ATENCAO: nao edite este arquivo manualmente durante execucao do servico.
# URL base da API TechDesk Pro
api_url = {ApiUrl}
# ID do cliente RAVAPI (fornecido pela RAVAPI Solucoes)
client_id = {ClientId}
# Token de autenticacao do terminal (gerado automaticamente no primeiro registro)
token = {Token}
# Intervalo de coleta em minutos (padrao: 15)
intervalo_minutos = {IntervaloMinutos}
");
}
}
}