#!/bin/bash
# Smoke-test для JPLAT-14222
# Проверяет что после переноса шаблонов в templates/classic/ все ключевые страницы работают

set -e

BASE_URL="${BASE_URL:-http://journals.rcsi.local}"
PROJECT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
CACHE_DIR="$PROJECT_DIR/cache/t_compile"

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

PASSED=0
FAILED=0

print_ok() {
    echo -e "${GREEN}✓${NC} $1"
    PASSED=$((PASSED + 1))
}

print_fail() {
    echo -e "${RED}✗${NC} $1"
    FAILED=$((FAILED + 1))
}

print_section() {
    echo ""
    echo -e "${YELLOW}=== $1 ===${NC}"
}

# 1. Очистка кеша Smarty
print_section "Очистка кеша Smarty"
find "$CACHE_DIR" -type f ! -name '.*' -delete 2>/dev/null && print_ok "Кеш очищен" || print_fail "Не удалось очистить кеш"

# 2. HTTP коды ключевых страниц
print_section "HTTP коды ключевых страниц"

check_http() {
    local url="$1"
    local expected="$2"
    local description="$3"
    local code
    code=$(curl -s -o /dev/null -w "%{http_code}" "$url")
    if [[ "$code" == "$expected" ]]; then
        print_ok "$description ($code)"
    else
        print_fail "$description (ожидался $expected, получили $code)"
    fi
}

check_http "$BASE_URL/" "200" "Главная страница"
check_http "$BASE_URL/index/user" "302" "Страница пользователя (редирект на логин/админку)"
check_http "$BASE_URL/index/admin" "302" "Админка (редирект на логин)"
check_http "$BASE_URL/index/help" "200" "Помощь"
check_http "$BASE_URL/index/login" "200" "Логин"
check_http "$BASE_URL/jour" "200" "Страница журнала jour"
check_http "$BASE_URL/subscr" "200" "Страница журнала subscr"

# 3. Проверка HTML маркеров на главной странице
print_section "HTML структура главной страницы"

HOMEPAGE_HTML=$(curl -s "$BASE_URL/")

check_marker() {
    local pattern="$1"
    local description="$2"
    if echo "$HOMEPAGE_HTML" | grep -q "$pattern"; then
        print_ok "$description"
    else
        print_fail "$description"
    fi
}

check_marker '<!DOCTYPE html>' "DOCTYPE присутствует"
check_marker '<head>' "Открывающий <head>"
check_marker '</head>' "Закрывающий </head>"
check_marker '<body' "Открывающий <body>"
check_marker '</body>' "Закрывающий </body>"
check_marker 'rel="stylesheet"' "CSS подключены"
check_marker '<title>' "Тег <title> присутствует"

# Количество stylesheet ссылок (в рабочем header их 13+)
STYLESHEET_COUNT=$(echo "$HOMEPAGE_HTML" | grep -c 'rel="stylesheet"' || true)
if [[ "$STYLESHEET_COUNT" -ge 10 ]]; then
    print_ok "Количество stylesheet: $STYLESHEET_COUNT (>= 10)"
else
    print_fail "Количество stylesheet: $STYLESHEET_COUNT (ожидалось >= 10)"
fi

# 4. Проверка templates/classic/
print_section "Структура templates/classic/"

TEMPLATE_COUNT=$(find "$PROJECT_DIR/templates/classic" -name "*.tpl" | wc -l | tr -d ' ')
if [[ "$TEMPLATE_COUNT" -ge 444 ]]; then
    print_ok "Шаблонов в templates/classic/: $TEMPLATE_COUNT (>= 444)"
else
    print_fail "Шаблонов в templates/classic/: $TEMPLATE_COUNT (ожидалось >= 444)"
fi

# Критичные шаблоны должны присутствовать
for tpl in common/header.tpl common/footer.tpl common/navbar.tpl index/site.tpl index/journal.tpl author/submit/support.tpl; do
    if [[ -f "$PROJECT_DIR/templates/classic/$tpl" ]]; then
        print_ok "Файл $tpl существует"
    else
        print_fail "Файл $tpl отсутствует"
    fi
done

# Старые шаблоны должны быть удалены
OLD_TEMPLATES=$(find "$PROJECT_DIR/templates" -name "*.tpl" -not -path "*/classic/*" | wc -l | tr -d ' ')
if [[ "$OLD_TEMPLATES" == "0" ]]; then
    print_ok "Старые шаблоны в templates/ удалены"
else
    print_fail "Остались старые шаблоны в templates/: $OLD_TEMPLATES"
fi

if [[ ! -d "$PROJECT_DIR/lib/pkp/templates" ]]; then
    print_ok "Каталог lib/pkp/templates/ удалён"
else
    print_fail "Каталог lib/pkp/templates/ всё ещё существует"
fi

# 5. Итог
print_section "Итог"
echo -e "${GREEN}Прошло: $PASSED${NC}"
echo -e "${RED}Провалено: $FAILED${NC}"

if [[ "$FAILED" == "0" ]]; then
    echo -e "${GREEN}✅ Все проверки пройдены${NC}"
    exit 0
else
    echo -e "${RED}❌ Есть проваленные проверки${NC}"
    exit 1
fi
