using System.ComponentModel.DataAnnotations;

namespace OTSSignsOrchestrator.Core.Models.DTOs;

public class UpdateInstanceDto
{
    // ── Identity / rendering context (populated from live service inspect) ──

    /// <summary>Customer display name (used in log messages and comment header).</summary>
    [MaxLength(100)]
    public string? CustomerName { get; set; }

    /// <summary>
    /// 3-letter abbreviation. If null, derived automatically from the stack name
    /// by stripping the "-cms-stack" suffix.
    /// </summary>
    [MaxLength(3)]
    public string? CustomerAbbrev { get; set; }

    /// <summary>Public hostname for the CMS (e.g. "acm.ots-signs.com").</summary>
    [MaxLength(200)]
    public string? CmsServerName { get; set; }

    /// <summary>Host-side HTTP port (defaults to 80 when null).</summary>
    public int? HostHttpPort { get; set; }

    /// <summary>Host path bind-mounted as the theme directory.</summary>
    [MaxLength(500)]
    public string? ThemeHostPath { get; set; }

    // ── Optional overrides (null = keep / use global settings) ──

    [MaxLength(500)]
    public string? TemplateRepoUrl { get; set; }

    [MaxLength(500)]
    public string? TemplateRepoPat { get; set; }

    [MaxLength(200)]
    public string? SmtpServer { get; set; }

    [MaxLength(200)]
    public string? SmtpUsername { get; set; }

    public List<string>? Constraints { get; set; }

    // ── NFS volume settings (per-instance) ──

    [MaxLength(200)]
    public string? NfsServer { get; set; }

    /// <summary>NFS export path on the server (e.g. "/srv/nfs").</summary>
    [MaxLength(500)]
    public string? NfsExport { get; set; }

    /// <summary>Optional subfolder within the export (e.g. "ots_cms"). Omit to use the export root.</summary>
    [MaxLength(500)]
    public string? NfsExportFolder { get; set; }

    [MaxLength(500)]
    public string? NfsExtraOptions { get; set; }

    // ── Pangolin / Newt tunnel settings ──

    /// <summary>Pangolin Newt ID for the tunnel service.</summary>
    [MaxLength(500)]
    public string? NewtId { get; set; }

    /// <summary>Pangolin Newt Secret for the tunnel service.</summary>
    [MaxLength(500)]
    public string? NewtSecret { get; set; }
}
