/**
 * @file Column 对齐属性扩展
 * @author Joker.X
 */

/**
 * 获取纵向居中 + 水平居中的 Column 对齐修饰器
 * @returns {AttributeModifier<ColumnAttribute>} Column 对齐修饰器
 * @example
* Column() { Text("Hi"); }.attributeModifier(columnCenter());
 */
export function columnCenter(): AttributeModifier<ColumnAttribute> {
  return {
    applyNormalAttribute: (instance: ColumnAttribute): void => {
      instance.justifyContent(FlexAlign.Center);
      instance.alignItems(HorizontalAlign.Center);
    }
  };
}

/**
 * 获取纵向起始 + 水平起始的 Column 对齐修饰器
 * @returns {AttributeModifier<ColumnAttribute>} Column 对齐修饰器
 * @example
* Column() { Text("Hi"); }.attributeModifier(columnStart());
 */
export function columnStart(): AttributeModifier<ColumnAttribute> {
  return {
    applyNormalAttribute: (instance: ColumnAttribute): void => {
      instance.justifyContent(FlexAlign.Start);
      instance.alignItems(HorizontalAlign.Start);
    }
  };
}

/**
 * 获取纵向末尾 + 水平末尾的 Column 对齐修饰器
 * @returns {AttributeModifier<ColumnAttribute>} Column 对齐修饰器
 * @example
* Column() { Text("Hi"); }.attributeModifier(columnEnd());
 */
export function columnEnd(): AttributeModifier<ColumnAttribute> {
  return {
    applyNormalAttribute: (instance: ColumnAttribute): void => {
      instance.justifyContent(FlexAlign.End);
      instance.alignItems(HorizontalAlign.End);
    }
  };
}

/**
 * 获取纵向两端分布 + 水平居中的 Column 对齐修饰器
 * @returns {AttributeModifier<ColumnAttribute>} Column 对齐修饰器
 * @example
* Column() { Text("A"); Text("B"); }.attributeModifier(columnSpaceBetween());
 */
export function columnSpaceBetween(): AttributeModifier<ColumnAttribute> {
  return {
    applyNormalAttribute: (instance: ColumnAttribute): void => {
      instance.justifyContent(FlexAlign.SpaceBetween);
      instance.alignItems(HorizontalAlign.Center);
    }
  };
}

/**
 * 获取纵向居中 + 水平起始的 Column 对齐修饰器
 * @returns {AttributeModifier<ColumnAttribute>} Column 对齐修饰器
 * @example
* Column() { Text("Hi"); }.attributeModifier(columnCenterStart());
 */
export function columnCenterStart(): AttributeModifier<ColumnAttribute> {
  return {
    applyNormalAttribute: (instance: ColumnAttribute): void => {
      instance.justifyContent(FlexAlign.Center);
      instance.alignItems(HorizontalAlign.Start);
    }
  };
}

/**
 * 获取纵向居中 + 水平末尾的 Column 对齐修饰器
 * @returns {AttributeModifier<ColumnAttribute>} Column 对齐修饰器
 * @example
* Column() { Text("Hi"); }.attributeModifier(columnCenterEnd());
 */
export function columnCenterEnd(): AttributeModifier<ColumnAttribute> {
  return {
    applyNormalAttribute: (instance: ColumnAttribute): void => {
      instance.justifyContent(FlexAlign.Center);
      instance.alignItems(HorizontalAlign.End);
    }
  };
}

/**
 * 获取纵向起始 + 水平居中的 Column 对齐修饰器
 * @returns {AttributeModifier<ColumnAttribute>} Column 对齐修饰器
 * @example
* Column() { Text("Hi"); }.attributeModifier(columnStartCenter());
 */
export function columnStartCenter(): AttributeModifier<ColumnAttribute> {
  return {
    applyNormalAttribute: (instance: ColumnAttribute): void => {
      instance.justifyContent(FlexAlign.Start);
      instance.alignItems(HorizontalAlign.Center);
    }
  };
}

/**
 * 获取纵向末尾 + 水平居中的 Column 对齐修饰器
 * @returns {AttributeModifier<ColumnAttribute>} Column 对齐修饰器
 * @example
* Column() { Text("Hi"); }.attributeModifier(columnEndCenter());
 */
export function columnEndCenter(): AttributeModifier<ColumnAttribute> {
  return {
    applyNormalAttribute: (instance: ColumnAttribute): void => {
      instance.justifyContent(FlexAlign.End);
      instance.alignItems(HorizontalAlign.Center);
    }
  };
}

/**
 * 获取纵向两端分布 + 水平起始的 Column 对齐修饰器
 * @returns {AttributeModifier<ColumnAttribute>} Column 对齐修饰器
 * @example
* Column() { Text("A"); Text("B"); }.attributeModifier(columnSpaceBetweenStart());
 */
export function columnSpaceBetweenStart(): AttributeModifier<ColumnAttribute> {
  return {
    applyNormalAttribute: (instance: ColumnAttribute): void => {
      instance.justifyContent(FlexAlign.SpaceBetween);
      instance.alignItems(HorizontalAlign.Start);
    }
  };
}

/**
 * 获取纵向两端分布 + 水平末尾的 Column 对齐修饰器
 * @returns {AttributeModifier<ColumnAttribute>} Column 对齐修饰器
 * @example
* Column() { Text("A"); Text("B"); }.attributeModifier(columnSpaceBetweenEnd());
 */
export function columnSpaceBetweenEnd(): AttributeModifier<ColumnAttribute> {
  return {
    applyNormalAttribute: (instance: ColumnAttribute): void => {
      instance.justifyContent(FlexAlign.SpaceBetween);
      instance.alignItems(HorizontalAlign.End);
    }
  };
}