# GroupWare React Frontend

GroupWare 시스템의 React 기반 프론트엔드입니다.

## 기술 스택

- **React 18** - UI 라이브러리
- **TypeScript** - 타입 안정성
- **Vite** - 빌드 도구 및 개발 서버
- **Tailwind CSS** - 스타일링
- **React Router v7** - 라우팅
- **Lucide React** - 아이콘

## 프로젝트 구조

```
frontend/
├── src/
│   ├── components/
│   │   └── layout/          # 레이아웃 컴포넌트
│   │       ├── Header.tsx
│   │       ├── Layout.tsx
│   │       └── Navigation.tsx
│   ├── pages/               # 페이지 컴포넌트
│   │   ├── Dashboard.tsx
│   │   ├── Todo.tsx
│   │   └── Placeholder.tsx
│   ├── communication.ts     # 통신 레이어 (WebView2 + WebSocket)
│   ├── types.ts            # TypeScript 타입 정의
│   ├── App.tsx             # 메인 앱 컴포넌트
│   ├── main.tsx            # 엔트리 포인트
│   └── index.css           # 글로벌 스타일
├── package.json
├── vite.config.ts
├── tailwind.config.js
├── tsconfig.json
├── build.bat               # 프로덕션 빌드 스크립트
└── run-dev.bat            # 개발 서버 실행 스크립트
```

## 개발 환경 설정

### 1. 의존성 설치

```bash
cd Project/frontend
npm install
```

### 2. 개발 서버 실행

```bash
npm run dev
# 또는
run-dev.bat
```

개발 서버는 `http://localhost:5173`에서 실행됩니다.

### 3. 핫 리로드 개발

개발 모드에서는 WebSocket(포트 8082)을 통해 C# 백엔드와 통신합니다.
GroupWare 애플리케이션에서 WebSocket 서버가 실행 중이어야 합니다.

## 프로덕션 빌드

### 빌드 실행

```bash
npm run build
# 또는
build.bat
```

빌드 결과물은 `dist/` 폴더에 생성되고,
`build.bat`을 사용하면 자동으로 `wwwroot/react-app/`으로 복사됩니다.

### 접근 URL

- **개발**: `http://localhost:5173`
- **프로덕션**: `http://localhost:7979/react-app/`

## 통신 방식

### 듀얼 모드 통신

이 프로젝트는 두 가지 통신 방식을 지원합니다:

| 환경 | 통신 방식 | 포트 |
|------|-----------|------|
| WebView2 (프로덕션) | HostObject 직접 호출 | - |
| Browser (개발) | WebSocket | 8082 |

### 자동 감지

`communication.ts`에서 실행 환경을 자동으로 감지하여 적절한 통신 방식을 사용합니다:

```typescript
const isWebView = typeof window !== 'undefined' && !!window.chrome?.webview;

if (isWebView) {
  // WebView2 HostObject 사용
  const result = await machine.Todo_GetTodos();
} else {
  // WebSocket 사용
  ws.send(JSON.stringify({ type: 'GET_TODOS' }));
}
```

## 페이지 목록

| 경로 | 페이지 | 상태 |
|------|--------|------|
| `/` | 대시보드 | 완료 |
| `/todo` | 할일 관리 | 완료 |
| `/kuntae` | 근태 관리 | 개발 예정 |
| `/jobreport` | 업무 일지 | 개발 예정 |
| `/project` | 프로젝트 | 개발 예정 |
| `/common` | 공용 코드 | 개발 예정 |

## 스타일 가이드

### 색상 팔레트

- **Primary**: Blue (`#3b82f6`)
- **Success**: Green (`#22c55e`)
- **Warning**: Amber (`#f59e0b`)
- **Danger**: Red (`#ef4444`)

### Glass Effect

```css
.glass-effect {
  background: rgba(255, 255, 255, 0.25);
  backdrop-filter: blur(10px);
  border: 1px solid rgba(255, 255, 255, 0.18);
}
```

## C# WebSocket 서버 설정

`MachineBridge/WebSocketServer.cs`를 참고하여 WebSocket 서버를 시작하세요:

```csharp
// 예시 코드
var wsServer = new GroupWareWebSocketServer("http://localhost:8082/", bridge);
wsServer.Start();
```
