export interface Style {
  textColor?: string|undefined; // this can be string, undefined or an absent key.
  fillColor?: string|undefined;
  fontBold?: boolean|undefined;
  fontUnderline?: boolean|undefined;
  fontItalic?: boolean|undefined;
  fontStrikethrough?: boolean|undefined;
}

export interface HeaderStyle {
  headerTextColor?: string | undefined; // this can be string, undefined or an absent key.
  headerFillColor?: string | undefined;
  headerFontBold?: boolean | undefined;
  headerFontUnderline?: boolean | undefined;
  headerFontItalic?: boolean | undefined;
  headerFontStrikethrough?: boolean | undefined;
}

export class CombinedStyle implements Style {
  public readonly textColor?: string;
  public readonly fillColor?: string;
  public readonly fontBold?: boolean;
  public readonly fontUnderline?: boolean;
  public readonly fontItalic?: boolean;
  public readonly fontStrikethrough?: boolean;
  constructor(rules: (Style|undefined|null)[], flags: any[]) {
    for (let i = 0; i < rules.length; i++) {
      if (flags[i]) {
        const textColor = rules[i]?.textColor;
        const fillColor = rules[i]?.fillColor;
        const fontBold = rules[i]?.fontBold;
        const fontUnderline = rules[i]?.fontUnderline;
        const fontItalic = rules[i]?.fontItalic;
        const fontStrikethrough = rules[i]?.fontStrikethrough;
        this.textColor = textColor || this.textColor;
        this.fillColor = fillColor || this.fillColor;
        this.fontBold = fontBold || this.fontBold;
        this.fontUnderline = fontUnderline || this.fontUnderline;
        this.fontItalic = fontItalic || this.fontItalic;
        this.fontStrikethrough = fontStrikethrough || this.fontStrikethrough;
      }
    }
  }
}