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

/**
 * 获取横向居中 + 垂直居中的 Row 对齐修饰器
 * @returns {AttributeModifier<RowAttribute>} Row 对齐修饰器
 * @example
* Row() { Text("Hi"); }.attributeModifier(rowCenter());
 */
export function rowCenter(): AttributeModifier<RowAttribute> {
  return {
    applyNormalAttribute: (instance: RowAttribute): void => {
      instance.justifyContent(FlexAlign.Center);
      instance.alignItems(VerticalAlign.Center);
    }
  };
}

/**
 * 获取横向起始 + 垂直居中的 Row 对齐修饰器
 * @returns {AttributeModifier<RowAttribute>} Row 对齐修饰器
 * @example
* Row() { Text("Hi"); }.attributeModifier(rowStartCenter());
 */
export function rowStartCenter(): AttributeModifier<RowAttribute> {
  return {
    applyNormalAttribute: (instance: RowAttribute): void => {
      instance.justifyContent(FlexAlign.Start);
      instance.alignItems(VerticalAlign.Center);
    }
  };
}

/**
 * 获取横向末尾 + 垂直居中的 Row 对齐修饰器
 * @returns {AttributeModifier<RowAttribute>} Row 对齐修饰器
 * @example
* Row() { Text("Hi"); }.attributeModifier(rowEndCenter());
 */
export function rowEndCenter(): AttributeModifier<RowAttribute> {
  return {
    applyNormalAttribute: (instance: RowAttribute): void => {
      instance.justifyContent(FlexAlign.End);
      instance.alignItems(VerticalAlign.Center);
    }
  };
}

/**
 * 获取横向两端分布 + 垂直居中的 Row 对齐修饰器
 * @returns {AttributeModifier<RowAttribute>} Row 对齐修饰器
 * @example
* Row() { Text("A"); Text("B"); }.attributeModifier(rowSpaceBetweenCenter());
 */
export function rowSpaceBetweenCenter(): AttributeModifier<RowAttribute> {
  return {
    applyNormalAttribute: (instance: RowAttribute): void => {
      instance.justifyContent(FlexAlign.SpaceBetween);
      instance.alignItems(VerticalAlign.Center);
    }
  };
}

/**
 * 获取横向居中 + 垂直顶部的 Row 对齐修饰器
 * @returns {AttributeModifier<RowAttribute>} Row 对齐修饰器
 * @example
* Row() { Text("Hi"); }.attributeModifier(rowCenterTop());
 */
export function rowCenterTop(): AttributeModifier<RowAttribute> {
  return {
    applyNormalAttribute: (instance: RowAttribute): void => {
      instance.justifyContent(FlexAlign.Center);
      instance.alignItems(VerticalAlign.Top);
    }
  };
}

/**
 * 获取横向居中 + 垂直底部的 Row 对齐修饰器
 * @returns {AttributeModifier<RowAttribute>} Row 对齐修饰器
 * @example
* Row() { Text("Hi"); }.attributeModifier(rowCenterBottom());
 */
export function rowCenterBottom(): AttributeModifier<RowAttribute> {
  return {
    applyNormalAttribute: (instance: RowAttribute): void => {
      instance.justifyContent(FlexAlign.Center);
      instance.alignItems(VerticalAlign.Bottom);
    }
  };
}

/**
 * 获取横向起始 + 垂直顶部的 Row 对齐修饰器
 * @returns {AttributeModifier<RowAttribute>} Row 对齐修饰器
 * @example
* Row() { Text("Hi"); }.attributeModifier(rowStartTop());
 */
export function rowStartTop(): AttributeModifier<RowAttribute> {
  return {
    applyNormalAttribute: (instance: RowAttribute): void => {
      instance.justifyContent(FlexAlign.Start);
      instance.alignItems(VerticalAlign.Top);
    }
  };
}

/**
 * 获取横向起始 + 垂直底部的 Row 对齐修饰器
 * @returns {AttributeModifier<RowAttribute>} Row 对齐修饰器
 * @example
* Row() { Text("Hi"); }.attributeModifier(rowStartBottom());
 */
export function rowStartBottom(): AttributeModifier<RowAttribute> {
  return {
    applyNormalAttribute: (instance: RowAttribute): void => {
      instance.justifyContent(FlexAlign.Start);
      instance.alignItems(VerticalAlign.Bottom);
    }
  };
}

/**
 * 获取横向末尾 + 垂直顶部的 Row 对齐修饰器
 * @returns {AttributeModifier<RowAttribute>} Row 对齐修饰器
 * @example
* Row() { Text("Hi"); }.attributeModifier(rowEndTop());
 */
export function rowEndTop(): AttributeModifier<RowAttribute> {
  return {
    applyNormalAttribute: (instance: RowAttribute): void => {
      instance.justifyContent(FlexAlign.End);
      instance.alignItems(VerticalAlign.Top);
    }
  };
}

/**
 * 获取横向末尾 + 垂直底部的 Row 对齐修饰器
 * @returns {AttributeModifier<RowAttribute>} Row 对齐修饰器
 * @example
* Row() { Text("Hi"); }.attributeModifier(rowEndBottom());
 */
export function rowEndBottom(): AttributeModifier<RowAttribute> {
  return {
    applyNormalAttribute: (instance: RowAttribute): void => {
      instance.justifyContent(FlexAlign.End);
      instance.alignItems(VerticalAlign.Bottom);
    }
  };
}

/**
 * 获取横向两端分布 + 垂直顶部的 Row 对齐修饰器
 * @returns {AttributeModifier<RowAttribute>} Row 对齐修饰器
 * @example
* Row() { Text("A"); Text("B"); }.attributeModifier(rowSpaceBetweenTop());
 */
export function rowSpaceBetweenTop(): AttributeModifier<RowAttribute> {
  return {
    applyNormalAttribute: (instance: RowAttribute): void => {
      instance.justifyContent(FlexAlign.SpaceBetween);
      instance.alignItems(VerticalAlign.Top);
    }
  };
}

/**
 * 获取横向两端分布 + 垂直底部的 Row 对齐修饰器
 * @returns {AttributeModifier<RowAttribute>} Row 对齐修饰器
 * @example
* Row() { Text("A"); Text("B"); }.attributeModifier(rowSpaceBetweenBottom());
 */
export function rowSpaceBetweenBottom(): AttributeModifier<RowAttribute> {
  return {
    applyNormalAttribute: (instance: RowAttribute): void => {
      instance.justifyContent(FlexAlign.SpaceBetween);
      instance.alignItems(VerticalAlign.Bottom);
    }
  };
}