namespace AppsheetEpplus;

public class ExcelDxfFill : DxfStyleBase<ExcelDxfFill> {
  public ExcelDxfFill(ExcelStyles styles)
      : base(styles) {
    PatternColor = new(styles);
    BackgroundColor = new(styles);
  }

  public ExcelFillStyle? PatternType { get; set; }

  /// <summary>
  /// The color of the pattern
  /// </summary>
  public ExcelDxfColor PatternColor { get; internal set; }

  /// <summary>
  /// The background color
  /// </summary>
  public ExcelDxfColor BackgroundColor { get; internal set; }

  protected internal override string Id =>
    GetAsString(PatternType)
        + "|"
        + (PatternColor == null ? "" : PatternColor.Id)
        + "|"
        + (BackgroundColor == null ? "" : BackgroundColor.Id);

  protected internal override void CreateNodes(XmlHelper helper, string path) {
    helper.CreateNode(path);
    SetValueEnum(helper, path + "/d:patternFill/@patternType", PatternType);
    SetValueColor(helper, path + "/d:patternFill/d:fgColor", PatternColor);
    SetValueColor(helper, path + "/d:patternFill/d:bgColor", BackgroundColor);
  }

  protected internal override bool HasValue =>
    PatternType != null || PatternColor.HasValue || BackgroundColor.HasValue;

  protected internal override ExcelDxfFill Clone() {
    return new(_styles) {
      PatternType = PatternType,
      PatternColor = PatternColor.Clone(),
      BackgroundColor = BackgroundColor.Clone(),
    };
  }
}
