@mixin hu-parent($class-name, $parents, $modules, $child-string-to-strip: null) {
  @each $module in hu-format-modules($modules) {
    @each $parent in $parents {
      $escaped-parent: hu-escape-class-name($parent);
      $escaped-child: if($child-string-to-strip, hu-escape-class-name(hu-string-replace($parent, $child-string-to-strip, "")), $escaped-parent);

      @if ($module == base) {
        .#{$escaped-parent} .#{$escaped-child}__#{$class-name} {
          @content;
        }
      }

      @else if ($module == visited) {
        .#{$escaped-parent} .#{$escaped-child}__#{hu-escape-class-name(":visited")}--#{$class-name}:visited {
          @content;
        }
      }

      @else if ($module == focus) {
        #{$hu-focus-parent} .#{$escaped-parent} .#{$escaped-child}__#{hu-escape-class-name(":focus")}--#{$class-name}#{$hu-focus-pseudo} {
          @content;
        }
      }

      @else if ($module == hover) {
        .#{$escaped-parent} .#{$escaped-child}__#{hu-escape-class-name(":hover")}--#{$class-name}:hover {
          @content;
        }
      }

      @else if ($module == hocus) {
        #{$hu-focus-parent} .#{$escaped-parent} .#{$escaped-child}__#{hu-escape-class-name(":hocus")}--#{$class-name}#{$hu-focus-pseudo},
        .#{$escaped-parent} .#{$escaped-child}__#{hu-escape-class-name(":hocus")}--#{$class-name}:hover {
          @content;
        }
      }

      @else if ($module == active) {
        .#{$escaped-parent} .#{$escaped-child}__#{hu-escape-class-name(":active")}--#{$class-name}:active {
          @content;
        }
      }

      @else if ($module == state) {
        @each $state in $hu-states {
          .#{$escaped-parent} .#{$state}.#{$escaped-child}__#{$state}--#{$class-name} {
            @content;
          }
        }
      }

      @else if ($module == reduced-motion) {
        @media (prefers-reduced-motion: reduce) {
          .#{$escaped-parent} .#{$escaped-child}__#{hu-escape-class-name("@reduced-motion")}--#{$class-name} {
            @include hu-bump-specificity {
              @content;
            }
          }
        }
      }

      @else if ($module == print) {
        @media print {
          .#{$escaped-parent} .#{$escaped-child}__#{hu-escape-class-name("@print")}--#{$class-name} {
            @include hu-bump-specificity {
              @content;
            }
          }
        }
      }
    }
  }
}
