using System.ComponentModel.DataAnnotations;
namespace OTSSignsOrchestrator.Core.Models.DTOs;
public class CreateInstanceDto
{
[Required, MaxLength(100)]
public string CustomerName { get; set; } = string.Empty;
/// Exactly 3 lowercase letters used to derive all resource names.
[Required, MaxLength(3), MinLength(3), RegularExpression("^[a-z]{3}$", ErrorMessage = "Abbreviation must be exactly 3 lowercase letters.")]
public string CustomerAbbrev { get; set; } = string.Empty;
/// SSH host to deploy to.
public Guid? SshHostId { get; set; }
/// Pangolin Newt ID (optional — tunnel service excluded if not provided).
[MaxLength(500)]
public string? NewtId { get; set; }
/// Pangolin Newt Secret (optional — tunnel service excluded if not provided).
[MaxLength(500)]
public string? NewtSecret { get; set; }
// ── NFS volume settings (optional — falls back to global settings) ──
[MaxLength(200)]
public string? NfsServer { get; set; }
/// NFS export path on the server (e.g. "/srv/nfs").
[MaxLength(500)]
public string? NfsExport { get; set; }
/// Optional subfolder within the export (e.g. "ots_cms"). Omit to use the export root.
[MaxLength(500)]
public string? NfsExportFolder { get; set; }
[MaxLength(500)]
public string? NfsExtraOptions { get; set; }
///
/// When true, any existing Docker volumes with the same stack prefix are removed before
/// deploying, so fresh volumes are created from the current compose driver_opts.
/// Defaults to false to avoid accidental data loss on re-deploys.
///
public bool PurgeStaleVolumes { get; set; } = false;
}