// Copyright (c) 2024 Synty Studios Limited. All rights reserved.
//
// Use of this software is subject to the terms and conditions of the Synty Studios End User Licence Agreement (EULA)
// available at: https://syntystore.com/pages/end-user-licence-agreement
//
// For additional details, see the LICENSE.MD file bundled with this software.
using SQLite;
using System.Collections.Generic;
namespace Synty.SidekickCharacters.Database.DTO
{
[Table("sk_body_shape_preset_image")]
public class SidekickBodyShapePresetImage
{
private SidekickBodyShapePreset _bodyShapePreset;
[PrimaryKey, AutoIncrement, Column("id")]
public int ID { get; set; }
[Column("ptr_body_shape_preset")]
public int PtrPreset { get; set; }
[Column("img_data")]
public byte[] ImageData { get; set; }
[Column("img_width")]
public int Width { get; set; }
[Column("img_height")]
public int Height { get; set; }
[Ignore]
public SidekickBodyShapePreset BodyShapePreset
{
get => _bodyShapePreset;
set
{
_bodyShapePreset = value;
PtrPreset = value.ID;
}
}
///
/// Gets a specific Preset Part by its database ID.
///
/// The Database Manager to use.
/// The id of the required Preset Part.
/// The specific Preset Part if it exists; otherwise null.
public static SidekickBodyShapePresetImage GetByID(DatabaseManager dbManager, int id)
{
SidekickBodyShapePresetImage bodyShapePresetImage = dbManager.GetCurrentDbConnection().Find(id);
Decorate(dbManager, bodyShapePresetImage);
return bodyShapePresetImage;
}
///
/// Gets a list of all the Preset Parts in the database.
///
/// The Database Manager to use.
/// A list of all preset parts in the database.
public static List GetAll(DatabaseManager dbManager)
{
List bodyShapePresetImages = dbManager.GetCurrentDbConnection().Table().ToList();
foreach (SidekickBodyShapePresetImage bodyShapePresetImage in bodyShapePresetImages)
{
Decorate(dbManager, bodyShapePresetImage);
}
return bodyShapePresetImages;
}
///
/// Gets a list of all the Preset Part Images in the database that have the matching Part Preset.
///
/// The Database Manager to use.
/// The preset to get all the preset part images for.
/// A list of all preset part images in the database for the given preset.
public static SidekickBodyShapePresetImage GetByPreset(DatabaseManager dbManager, SidekickBodyShapePreset bodyShapePreset)
{
SidekickBodyShapePresetImage bodyShapePresetImage = dbManager.GetCurrentDbConnection().Table()
.FirstOrDefault(bodyShapePresetImage => bodyShapePresetImage.PtrPreset == bodyShapePreset.ID);
if (bodyShapePresetImage != null)
{
Decorate(dbManager, bodyShapePresetImage);
}
return bodyShapePresetImage;
}
///
/// Ensures that the given preset has its nice DTO class properties set
///
/// The Database Manager to use.
/// The color preset to decorate
/// A color set with all DTO class properties set
private static void Decorate(DatabaseManager dbManager, SidekickBodyShapePresetImage bodyShapePresetImage)
{
bodyShapePresetImage.BodyShapePreset ??= SidekickBodyShapePreset.GetByID(dbManager, bodyShapePresetImage.PtrPreset);
}
///
/// Updates or Inserts this item in the Database.
///
/// The database manager to use.
public void Save(DatabaseManager dbManager)
{
if (ID <= 0)
{
dbManager.GetCurrentDbConnection().Insert(this);
// in theory this could return a different ID, but in practice it's highly unlikely
ID = (int) SQLite3.LastInsertRowid(dbManager.GetCurrentDbConnection().Handle);
}
dbManager.GetCurrentDbConnection().Update(this);
}
}
}