using System.Collections.Generic;
using System.Linq;
using AIImages.Helpers;
using Verse;
namespace AIImages.Components
{
///
/// Компонент для хранения данных AI-сгенерированных портретов пешки
///
public class PawnPortraitComp : ThingComp
{
///
/// Список путей к сохраненным портретам (галерея)
///
private List portraitPaths = new List();
///
/// Есть ли сохраненные портреты
///
public bool HasPortrait => portraitPaths != null && portraitPaths.Count > 0;
///
/// Количество портретов в галерее
///
public int PortraitCount => portraitPaths?.Count ?? 0;
///
/// Получить все пути к портретам
///
public List GetAllPortraits() => portraitPaths?.ToList() ?? new List();
///
/// Получить последний портрет (для обратной совместимости)
///
public string PortraitPath => HasPortrait ? portraitPaths.Last() : null;
///
/// Добавить новый портрет в галерею
///
public void AddPortrait(string path)
{
if (string.IsNullOrEmpty(path))
return;
if (portraitPaths == null)
portraitPaths = new List();
portraitPaths.Add(path);
DebugLogger.Log($"[AI Images] Added portrait to gallery: {path}");
}
///
/// Удалить портрет из галереи
///
public bool RemovePortrait(string path)
{
if (portraitPaths == null || string.IsNullOrEmpty(path))
return false;
bool removed = portraitPaths.Remove(path);
if (removed)
{
DebugLogger.Log($"[AI Images] Removed portrait from gallery: {path}");
}
return removed;
}
///
/// Очистить все портреты
///
public void ClearPortraits()
{
if (portraitPaths != null)
{
int count = portraitPaths.Count;
portraitPaths.Clear();
DebugLogger.Log($"[AI Images] Cleared {count} portraits from gallery");
}
}
///
/// Сохранение/загрузка данных
///
public override void PostExposeData()
{
base.PostExposeData();
bool isSaving = Scribe.mode == LoadSaveMode.Saving;
bool isLoading = Scribe.mode == LoadSaveMode.LoadingVars;
DebugLogger.Log(
$"[AI Images] PostExposeData for {parent?.LabelShort} - Mode: {Scribe.mode}, Portrait count: {PortraitCount}"
);
// Сохраняем список портретов
Scribe_Collections.Look(ref portraitPaths, "aiPortraitPaths", LookMode.Value);
// Обратная совместимость: если есть старый формат с одним портретом, добавляем его в список
if (isLoading && (portraitPaths == null || portraitPaths.Count == 0))
{
string oldPortraitPath = null;
Scribe_Values.Look(ref oldPortraitPath, "aiPortraitPath", null);
if (!string.IsNullOrEmpty(oldPortraitPath))
{
portraitPaths = new List { oldPortraitPath };
DebugLogger.Log($"[AI Images] Migrated old single portrait to gallery: {oldPortraitPath}");
}
}
DebugLogger.Log(
$"[AI Images] PostExposeData completed for {parent?.LabelShort} - Portrait count: {PortraitCount}, HasPortrait: {HasPortrait}"
);
}
}
}