#!/bin/bash

# Superport 자동화 테스트 실행 스크립트
# 
# 사용법:
#   ./test/scripts/run_all_tests.sh          # 모든 테스트 실행
#   ./test/scripts/run_all_tests.sh Company  # 특정 화면만 테스트
#   ./test/scripts/run_all_tests.sh --help   # 도움말

set -e  # 에러 발생 시 스크립트 중단

# 색상 정의
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 프로젝트 루트 디렉토리로 이동
cd "$(dirname "$0")/../.."

echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}"
echo -e "${BLUE}        🚀 SUPERPORT 자동화 테스트 실행 🚀${NC}"
echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}"
echo ""

# 도움말 표시
if [ "$1" == "--help" ] || [ "$1" == "-h" ]; then
    echo "사용법:"
    echo "  $0                    # 모든 화면 테스트 실행"
    echo "  $0 [화면명]           # 특정 화면만 테스트"
    echo "  $0 --parallel         # 병렬 실행 (기본값)"
    echo "  $0 --sequential       # 순차 실행"
    echo ""
    echo "테스트 가능한 화면:"
    echo "  - EquipmentIn   : 장비 입고"
    echo "  - EquipmentOut  : 장비 출고"
    echo "  - License       : 라이선스"
    echo "  - Overview      : 대시보드"
    echo "  - Company       : 회사 관리"
    echo "  - User          : 사용자 관리"
    echo "  - Warehouse     : 창고 관리"
    echo ""
    echo "예시:"
    echo "  $0 Company           # Company 화면만 테스트"
    echo "  $0 Company User      # Company와 User 화면 테스트"
    exit 0
fi

# 테스트 보고서 디렉토리 생성
mkdir -p test_reports

# Flutter 패키지 업데이트
echo -e "${YELLOW}📦 패키지 업데이트 중...${NC}"
flutter pub get

# 코드 생성 (Freezed, JsonSerializable)
echo -e "${YELLOW}🔧 코드 생성 중...${NC}"
flutter pub run build_runner build --delete-conflicting-outputs || true

# 테스트 실행 시작 시간 기록
START_TIME=$(date +%s)

# 테스트 실행
echo -e "${GREEN}🧪 테스트 실행 중...${NC}"
echo ""

# 특정 화면 테스트 또는 전체 테스트
if [ -n "$1" ] && [ "$1" != "--parallel" ] && [ "$1" != "--sequential" ]; then
    # 특정 화면 테스트
    echo -e "${BLUE}선택된 화면: $@${NC}"
    flutter test test/integration/automated/master_test_suite.dart \
        --reporter expanded \
        --coverage \
        --timeout 10m \
        -- --include-screens "$@"
else
    # 전체 테스트
    echo -e "${BLUE}모든 화면 테스트 실행${NC}"
    flutter test test/integration/automated/master_test_suite.dart \
        --reporter expanded \
        --coverage \
        --timeout 10m
fi

# 테스트 결과 저장
TEST_EXIT_CODE=$?

# 종료 시간 및 소요 시간 계산
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))
MINUTES=$((DURATION / 60))
SECONDS=$((DURATION % 60))

echo ""
echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}"

if [ $TEST_EXIT_CODE -eq 0 ]; then
    echo -e "${GREEN}✅ 테스트 성공!${NC}"
else
    echo -e "${RED}❌ 테스트 실패!${NC}"
fi

echo -e "${BLUE}⏱️  소요 시간: ${MINUTES}분 ${SECONDS}초${NC}"
echo -e "${BLUE}📊 리포트 위치: test_reports/${NC}"
echo -e "${BLUE}═══════════════════════════════════════════════════════════════${NC}"

# 커버리지 리포트 생성 (선택적)
if [ -d "coverage" ]; then
    echo ""
    echo -e "${YELLOW}📈 커버리지 리포트 생성 중...${NC}"
    
    # HTML 커버리지 리포트 생성 (lcov 필요)
    if command -v genhtml &> /dev/null; then
        genhtml coverage/lcov.info -o coverage/html
        echo -e "${GREEN}✅ HTML 커버리지 리포트 생성: coverage/html/index.html${NC}"
    else
        echo -e "${YELLOW}⚠️  genhtml이 설치되지 않음. HTML 리포트를 생성하려면 lcov를 설치하세요.${NC}"
        echo -e "${YELLOW}   brew install lcov (macOS) 또는 apt-get install lcov (Linux)${NC}"
    fi
fi

# 최근 테스트 리포트 표시
echo ""
echo -e "${BLUE}📄 최근 생성된 리포트:${NC}"
ls -lt test_reports/*.md 2>/dev/null | head -3 || echo "  리포트 없음"

exit $TEST_EXIT_CODE