#!/bin/bash

# 權限系統測試腳本

echo "========================================="
echo "ISO 27001 權限系統測試"
echo "========================================="
echo ""

# 檢查後端服務
echo "1. 檢查後端服務狀態..."
if curl -s http://localhost:8000/api/assets/ > /dev/null; then
    echo "✅ 後端服務運行正常"
else
    echo "❌ 後端服務無法連接"
    exit 1
fi
echo ""

# 測試登入 API
echo "2. 測試登入 API..."
LOGIN_RESPONSE=$(curl -s -X POST http://localhost:8000/api/auth/login/ \
  -H "Content-Type: application/json" \
  -d '{"username":"testuser","password":"testpass123"}')

if echo "$LOGIN_RESPONSE" | grep -q "access"; then
    echo "✅ 登入 API 正常"
    ACCESS_TOKEN=$(echo "$LOGIN_RESPONSE" | grep -o '"access":"[^"]*' | cut -d'"' -f4)
    echo "   Token: ${ACCESS_TOKEN:0:50}..."
else
    echo "⚠️ 登入失敗（可能是測試使用者不存在）"
    echo "   請先創建測試使用者"
fi
echo ""

# 測試使用者資訊 API
if [ ! -z "$ACCESS_TOKEN" ]; then
    echo "3. 測試使用者資訊 API（包含權限）..."
    USER_INFO=$(curl -s http://localhost:8000/api/auth/me/ \
      -H "Authorization: Bearer $ACCESS_TOKEN")
    
    if echo "$USER_INFO" | grep -q "permissions"; then
        echo "✅ 使用者資訊 API 正常"
        echo "   角色: $(echo "$USER_INFO" | grep -o '"role":"[^"]*' | cut -d'"' -f4)"
        echo "   角色顯示: $(echo "$USER_INFO" | grep -o '"role_display":"[^"]*' | cut -d'"' -f4)"
        
        # 顯示部分權限
        PERMISSIONS=$(echo "$USER_INFO" | grep -o '"permissions":\[[^]]*\]' | head -c 100)
        echo "   權限（部分）: ${PERMISSIONS}..."
    else
        echo "❌ 使用者資訊 API 異常"
    fi
    echo ""
    
    # 測試資產 API 權限
    echo "4. 測試資產列表 API（需要 asset_view 權限）..."
    ASSETS_RESPONSE=$(curl -s -w "\n%{http_code}" http://localhost:8000/api/assets/ \
      -H "Authorization: Bearer $ACCESS_TOKEN")
    
    HTTP_CODE=$(echo "$ASSETS_RESPONSE" | tail -n1)
    
    if [ "$HTTP_CODE" = "200" ]; then
        echo "✅ 資產列表 API 可訪問（有權限）"
    elif [ "$HTTP_CODE" = "403" ]; then
        echo "⚠️ 資產列表 API 拒絕訪問（無權限）"
    else
        echo "❌ 資產列表 API 返回 HTTP $HTTP_CODE"
    fi
    echo ""
fi

# 檢查前端檔案
echo "5. 檢查前端權限檔案..."
if [ -f "frontend/src/hooks/usePermissions.ts" ]; then
    echo "✅ usePermissions Hook 已建立"
else
    echo "❌ usePermissions Hook 不存在"
fi

if [ -f "frontend/src/components/PermissionGuard.tsx" ]; then
    echo "✅ PermissionGuard 組件已建立"
else
    echo "❌ PermissionGuard 組件不存在"
fi

if [ -f "frontend/src/types/user.ts" ]; then
    echo "✅ User 類型定義已建立"
else
    echo "❌ User 類型定義不存在"
fi
echo ""

# 檢查後端權限檔案
echo "6. 檢查後端權限檔案..."
if [ -f "backend/accounts/permissions.py" ]; then
    echo "✅ 權限模組已建立"
    
    # 檢查權限常數
    if grep -q "class Permissions:" backend/accounts/permissions.py; then
        echo "   ✓ Permissions 類別存在"
    fi
    
    # 檢查角色權限映射
    if grep -q "ROLE_PERMISSIONS" backend/accounts/permissions.py; then
        echo "   ✓ ROLE_PERMISSIONS 映射存在"
    fi
    
    # 檢查權限類別
    if grep -q "class HasPermission" backend/accounts/permissions.py; then
        echo "   ✓ HasPermission 類別存在"
    fi
else
    echo "❌ 權限模組不存在"
fi
echo ""

echo "========================================="
echo "測試完成"
echo "========================================="
echo ""
echo "權限系統核心功能已實作："
echo "✓ 後端 RBAC 權限系統"
echo "✓ 6 種角色定義"
echo "✓ DRF 權限類別"
echo "✓ 前端權限 Hook"
echo "✓ 前端權限控制組件"
echo "✓ API 權限驗證"
echo ""
echo "詳細資訊請查看："
echo "  - PERMISSION_SYSTEM_COMPLETION.md"
echo "  - backend/accounts/permissions.py"
echo "  - frontend/src/hooks/usePermissions.ts"
echo "  - frontend/src/components/PermissionGuard.tsx"
echo ""
