using System.Collections.Generic;
using System.IO;
using System.Linq;
using gehGassi.Core.Interfaces;
using gehGassi.Domain.Placeholders;
using gehGassi.Domain.Users;
using Newtonsoft.Json;
namespace gehGassi.Core.Services
{
///
/// Service der Funktionen rund um die Variablen/Platzhalter bietet
///
public class PlaceHolderService : IPlaceHolderService
{
private readonly string _directory;
///
/// Erstellt eine Instanz
///
/// Pfad in welchem die Platzhalter-Dateien liegen
public PlaceHolderService(string directory)
{
_directory = directory;
}
///
/// Gibt die Liste der verfügbaren Platzhalter-Kategorien zurück
///
/// Sprache ISO2
/// Liste Kategorien
public List GetCategories(string lang)
{
var list = Load(lang);
return list;
}
///
/// Gibt die Liste der Platzhalter-Variablen für eine Kategorie zurück
///
/// Id der Kategorie
/// Sprache ISO2
/// Liste Platzhalter
public List GetPlaceholders(int categoryId, string lang)
{
var list = new List();
var categories = Load(lang);
if (categories == null || !categories.Any()) return list;
var category = categories.FirstOrDefault(c => c.Id == categoryId);
if (category != null)
list = category.PlaceHolders.ToList();
return list;
}
///
/// Ersetzt in einem Text alle Platzhalter mit den entsprechenden Daten, sofern diese zur Verfügung gestellt wurden.
///
/// Text in welchem die Platzhalter ausgefüllt werden sollen
/// Sprache ISO2
/// Id der Timezone für Datums-Operationen
/// Soll bei manchen Ersatzoperationen HTML verwendet werden? Z.B. Adress-Block
/// Optional: Mandant
/// Optional: Benutzer
/// Optional: Kurs
/// Optional: Student
/// Anzahl ersetzer Platzhalter. Der Text ist als ref Parameter bearbeitet
public int FillIn(ref string content, string lang, string timezoneId, bool useHtml = false, ApplicationUser user = null)
{
var replaceCount = 0;
return replaceCount;
}
#region Private
///
/// Laden der Datei mit den Paltzhaltern
///
///
///
private List Load(string lang)
{
var list = new List();
//Prüfen ob das Verzeichnis existiert
if (!Directory.Exists(_directory))
Directory.CreateDirectory(_directory);
try
{
var filename = Path.Combine(_directory, $"placeholders_{lang}.json");
if (File.Exists(filename))
{
list = JsonConvert.DeserializeObject(File.ReadAllText(filename)).ToList();
}
}
catch
{
// ignored
}
return list;
}
#endregion
}
}