# 🔗 การ Redirect ไปหน้า Login ของ ServTrack

## 🎯 ปัญหา
เมื่อ integrate กับ ServTrack:
- ระบบ Satisfaction Survey จะไม่มีหน้า login ของตัวเอง
- ต้อง redirect ไปหน้า login ของ ServTrack แทน
- URL จะเปลี่ยนจาก `http://localhost:8000/login` เป็น `https://servtrack.com/login`

## 🔧 วิธีแก้ไข

### 1. **ใช้ Environment Variable**

#### ตั้งค่าใน `.env`
```env
# ServTrack Integration
SERVTRACK_BASE_URL=https://servtrack.com
SERVTRACK_LOGIN_URL=https://servtrack.com/login
SERVTRACK_SURVEY_URL=https://servtrack.com/survey
```

#### แก้ไข Controller
```php
// app/Http/Controllers/SurveyController.php
public function showSurveyByToken($token)
{
    try {
        // ตรวจสอบว่าผู้ใช้ล็อกอินแล้ว
        if (!Auth::check()) {
            $servtrackLoginUrl = config('app.servtrack_login_url', 'https://servtrack.com/login');
            return redirect($servtrackLoginUrl)
                ->with('error', 'กรุณาล็อกอินก่อนทำแบบประเมิน');
        }
        // ... ส่วนที่เหลือเหมือนเดิม
    }
}
```

### 2. **ใช้ Configuration File**

#### สร้างไฟล์ `config/servtrack.php`
```php
<?php

return [
    'base_url' => env('SERVTRACK_BASE_URL', 'https://servtrack.com'),
    'login_url' => env('SERVTRACK_LOGIN_URL', 'https://servtrack.com/login'),
    'survey_url' => env('SERVTRACK_SURVEY_URL', 'https://servtrack.com/survey'),
    'api_url' => env('SERVTRACK_API_URL', 'https://servtrack.com/api'),
];
```

#### แก้ไข Controller
```php
public function showSurveyByToken($token)
{
    try {
        if (!Auth::check()) {
            $servtrackLoginUrl = config('servtrack.login_url');
            return redirect($servtrackLoginUrl)
                ->with('error', 'กรุณาล็อกอินก่อนทำแบบประเมิน');
        }
        // ...
    }
}
```

### 3. **ใช้ Service Class**

#### สร้างไฟล์ `app/Services/ServTrackService.php`
```php
<?php

namespace App\Services;

class ServTrackService
{
    public static function getLoginUrl(): string
    {
        return config('servtrack.login_url', 'https://servtrack.com/login');
    }
    
    public static function getSurveyUrl(string $token): string
    {
        $baseUrl = config('servtrack.base_url', 'https://servtrack.com');
        return "{$baseUrl}/survey/{$token}";
    }
    
    public static function isIntegrated(): bool
    {
        return config('app.servtrack_integrated', false);
    }
}
```

#### แก้ไข Controller
```php
use App\Services\ServTrackService;

public function showSurveyByToken($token)
{
    try {
        if (!Auth::check()) {
            if (ServTrackService::isIntegrated()) {
                return redirect(ServTrackService::getLoginUrl())
                    ->with('error', 'กรุณาล็อกอินก่อนทำแบบประเมิน');
            } else {
                return redirect()->route('login')
                    ->with('error', 'กรุณาล็อกอินก่อนทำแบบประเมิน');
            }
        }
        // ...
    }
}
```

## 🎯 **วิธีที่แนะนำ: Environment Variable**

### **ขั้นตอนที่ 1: ตั้งค่า .env**
```env
# Development (ใช้ระบบของตัวเอง)
SERVTRACK_INTEGRATED=false
SERVTRACK_LOGIN_URL=http://localhost:8000/login

# Production (integrate กับ ServTrack)
SERVTRACK_INTEGRATED=true
SERVTRACK_LOGIN_URL=https://servtrack.com/login
```

### **ขั้นตอนที่ 2: แก้ไข Controller**
```php
public function showSurveyByToken($token)
{
    try {
        if (!Auth::check()) {
            $isIntegrated = config('app.servtrack_integrated', false);
            
            if ($isIntegrated) {
                // Production: redirect ไป ServTrack
                $loginUrl = config('app.servtrack_login_url', 'https://servtrack.com/login');
                return redirect($loginUrl)
                    ->with('error', 'กรุณาล็อกอินก่อนทำแบบประเมิน');
            } else {
                // Development: redirect ไประบบของตัวเอง
                return redirect()->route('login')
                    ->with('error', 'กรุณาล็อกอินก่อนทำแบบประเมิน');
            }
        }
        // ... ส่วนที่เหลือเหมือนเดิม
    }
}
```

### **ขั้นตอนที่ 3: แก้ไข Mail Class**
```php
// app/Mail/SurveyInvitationMail.php
public function build()
{
    $isIntegrated = config('app.servtrack_integrated', false);
    
    if ($isIntegrated) {
        // Production: ใช้ URL ของ ServTrack
        $baseUrl = config('app.servtrack_base_url', 'https://servtrack.com');
        $surveyUrl = "{$baseUrl}/survey/{$this->invitation->token}";
    } else {
        // Development: ใช้ URL ของตัวเอง
        $surveyUrl = route('survey.take', ['token' => $this->invitation->token]);
    }
    
    return $this->view('emails.survey-invitation')
        ->with([
            'surveyUrl' => $surveyUrl,
            // ... ข้อมูลอื่นๆ
        ]);
}
```

## 🔄 **Flow การทำงาน**

### **Development Mode**
```
คลิกลิงก์ใน Email
         ↓
ไปที่ localhost:8000/survey/{token}
         ↓
ตรวจสอบ auth
         ↓
ไม่ล็อกอิน → redirect ไป localhost:8000/login
```

### **Production Mode (ServTrack)**
```
คลิกลิงก์ใน Email
         ↓
ไปที่ servtrack.com/survey/{token}
         ↓
ตรวจสอบ auth
         ↓
ไม่ล็อกอิน → redirect ไป servtrack.com/login
```

## ⚙️ **การตั้งค่า Environment**

### **Development (.env)**
```env
APP_ENV=local
SERVTRACK_INTEGRATED=false
SERVTRACK_LOGIN_URL=http://localhost:8000/login
SERVTRACK_BASE_URL=http://localhost:8000
```

### **Production (.env)**
```env
APP_ENV=production
SERVTRACK_INTEGRATED=true
SERVTRACK_LOGIN_URL=https://servtrack.com/login
SERVTRACK_BASE_URL=https://servtrack.com
```

## 🧪 **การทดสอบ**

### **ทดสอบ Development**
```bash
# ตั้งค่า
SERVTRACK_INTEGRATED=false

# ทดสอบ
# ควร redirect ไป localhost:8000/login
```

### **ทดสอบ Production**
```bash
# ตั้งค่า
SERVTRACK_INTEGRATED=true
SERVTRACK_LOGIN_URL=https://servtrack.com/login

# ทดสอบ
# ควร redirect ไป servtrack.com/login
```

## 📝 **สรุป**

**วิธีที่แนะนำ:**
1. ใช้ Environment Variable
2. ตั้งค่า `SERVTRACK_INTEGRATED=true/false`
3. ตั้งค่า `SERVTRACK_LOGIN_URL`
4. แก้ไข Controller และ Mail Class

**ข้อดี:**
- เปลี่ยนได้ง่ายระหว่าง Development/Production
- ไม่ต้องแก้โค้ดเมื่อ deploy
- รองรับการ integrate กับ ServTrack

**ผลลัพธ์:**
- Development: redirect ไประบบของตัวเอง
- Production: redirect ไป ServTrack
