function cmd::group::set_main() {
  local group_name="" peer_name="" type=""
  while [[ $# -gt 0 ]]; do
    case "$1" in
      --name) group_name="$2"; shift 2 ;;
      --peer) peer_name="$2";  shift 2 ;;
      --type) type="$2";       shift 2 ;;
      *) log::error "Unknown flag: $1"; return 1 ;;
    esac
  done

  [[ -z "$group_name" ]] && log::error "Missing --name" && return 1
  [[ -z "$peer_name"  ]] && log::error "Missing --peer" && return 1

  # Resolve peer name
  peer_name=$(peers::resolve_and_require "$peer_name" "$type") || return 1

  # Verify peer is in the group
  if ! group::has_peer "$group_name" "$peer_name"; then
    log::error "Peer '${peer_name}' is not in group '${group_name}'"
    log::info  "Add them first: wgctl group peer add --name ${group_name} --peer ${peer_name}"
    return 1
  fi

  peers::set_main_group "$peer_name" "$group_name"
  log::wg_success "Main group for '${peer_name}' set to '${group_name}'"
}