# set_namespace()

지정된 슬롯 레퍼런스의 네임스페이스를 **대화상자 없이** 변경합니다. 파이프라인 자동화 및 TA 스크립트용으로 설계된 비대화식 API입니다. 노드, 레이어, SelectionSet 이름이 일괄 업데이트됩니다.

### 시그니처
```python
api.set_namespace(slot: int, namespace: str) -> dict
```

### 파라미터
| 파라미터 | 타입 | 설명 |
| --- | --- | --- |
| `slot` | `int` | 슬롯 번호 (0-9). 반드시 `int`여야 합니다 (bool 거부). |
| `namespace` | `str` | 새 네임스페이스 이름. 공백 문자만으로 구성된 경우 거부합니다. |

### 반환값
```python
{"success": bool, "namespace": str, "message": str}
```

| 키 | 타입 | 설명 |
| --- | --- | --- |
| `success` | `bool` | 변경 성공 여부. no-op(이미 같은 이름) 시에도 `True`. |
| `namespace` | `str` | 적용된 네임스페이스 이름. |
| `message` | `str` | 상태 설명 문자열. |

### 예외
| 예외 | 조건 |
| --- | --- |
| `TypeError` | `slot`이 int가 아닐 때 (bool 포함), 또는 `namespace`가 str이 아닐 때 |
| `ValueError` | 슬롯이 유효하지 않거나 비어 있을 때, `namespace`가 공백 문자뿐일 때, 또는 같은 이름이 다른 슬롯에 이미 존재할 때 |
| `RuntimeError` | 내부 네임스페이스 적용 실패 시 |

---

### 동작 세부 사항

- **No-op**: 슬롯이 이미 동일한 네임스페이스를 가지면 씬을 수정하지 않고 즉시 `{"success": True}`를 반환합니다.
- **중복 검사**: 다른 점유된 슬롯이 이미 같은 이름을 사용 중이면 `ValueError`를 발생시킵니다.
- **일괄 적용**: 내부적으로 UI 다이얼로그와 동일한 엔진을 사용하므로, 노드·레이어·SelectionSet 이름이 일관되게 변경됩니다.
- **씬 저장**: 성공 시 InfoNode UDP에 즉시 저장됩니다 (다른 쓰기 메서드와 동일).

---

### 예제
```python
from os_fast_ref.api import FastRefAPI

api = FastRefAPI()

# 슬롯 0의 네임스페이스를 "Centaur"로 변경
result = api.set_namespace(slot=0, namespace="Centaur")
print(result["namespace"])  # "Centaur"

# UI가 열려 있으면 갱신
api.update_ui()
```

### 잘못된 사용 예제
```python
# TypeError: slot은 int여야 합니다
api.set_namespace(slot="0", namespace="NewNs")   # TypeError
api.set_namespace(slot=True, namespace="NewNs")  # TypeError

# TypeError: namespace는 str이어야 합니다
api.set_namespace(slot=0, namespace=123)          # TypeError

# ValueError: 빈 네임스페이스
api.set_namespace(slot=0, namespace="   ")        # ValueError

# ValueError: 다른 슬롯이 이미 "Mable"을 사용 중일 때
api.set_namespace(slot=0, namespace="Mable")      # ValueError
```

---

### 파이프라인 활용 예시
```python
from os_fast_ref.api import FastRefAPI

api = FastRefAPI()
refs = api.get_reference_list()

# 현재 네임스페이스 목록 출력
for r in refs:
    print(f"Slot {r['slot']}: {r['namespace']}")

# 슬롯 2의 네임스페이스를 파이프라인 규칙에 맞게 변경
result = api.set_namespace(slot=2, namespace="Enemy_A")
if result["success"]:
    print(f"Renamed to: {result['namespace']}")
    api.update_ui()
```

---