<?php
// 파일위치 : /mylib/strongswan_profile_check_inc_language/strongswan_profile_check_inc_en.php

//////////////////////////////////////////////
// English en
//////////////////////////////////////////////

// [Fix] 500 에러 해결: 라이브러리 참조 경로 수정 (같은 폴더 기준)
include_once('../_common.php');
require_once('strongswan_profile_common_lib.php');

// G5_SERVER_TIME 상수 체크
if (!defined('G5_SERVER_TIME')) {
    define('G5_SERVER_TIME', time());
}

// [Fix] 500 에러 해결: 변수 초기화
$profiles = array();
$vpn_usage_hours = VPN_USAGE_HOURS; // 무료 사용 시간 설정 (시간 단위)
$vpn_free_active_timer = $vpn_usage_hours * 3600;

// 현재 언어 설정 (기본값)
$current_lang = 'en';

// 회원 정보 조회
$mb = get_member($mb_id);

if (isset($mb) && is_array($mb)) {
    // 차단된 아이디인가?
    if (isset($mb['mb_intercept_date']) && $mb['mb_intercept_date'] && $mb['mb_intercept_date'] <= date("Ymd", G5_SERVER_TIME)) {
        $date = preg_replace("/([0-9]{4})([0-9]{2})([0-9]{2})/", "$1-$2-$3", $mb['mb_intercept_date']);
        $profiles[] = array(
            "result" => "msg",
            "id" => "0",
            "title" => "Notice",
            "message" => "Your ID has been banned.<br>Date: " . $date . " KST"
        );
        $good_member_flag = false;
    }

    // 탈퇴한 아이디인가?
    if (isset($mb['mb_leave_date']) && $mb['mb_leave_date'] && $mb['mb_leave_date'] <= date("Ymd", G5_SERVER_TIME)) {
        $date = preg_replace("/([0-9]{4})([0-9]{2})([0-9]{2})/", "$1-$2-$3", $mb['mb_leave_date']);
        $profiles[] = array(
            "result" => "msg",
            "id" => "0",
            "title" => "Notice",
            "message" => "Your ID has been withdrawn and cannot be accessed.<br>Date: " . $date . " KST"
        );
        $good_member_flag = false;
    }

    // 데이터베이스에서 프로필 정보 조회
    if (isset($good_member_flag) && $good_member_flag === false) {
        // 불량 회원인 경우 JSON 출력 후 종료
        echo json_encode($profiles);
        exit;
    }

    try {

        // mb_no 키 존재 확인
        $mb_no = isset($mb['mb_no']) ? $mb['mb_no'] : 'unknown';

        // 일반 회원인 경우 (구매가 이뤄질때 vpnid_list 테이블에 추가된 것 활용함)
        if (trim($mb_no) != "" && $mb_no != "0" && $mb_no != "unknown") {
            //일반 VPN 서비스 이용자 ID인 경우 추가 처리
            $sql_vpnid_list = "SELECT * FROM `vpnid_list` WHERE (mb_id = '$mb_id') AND enable IN (1,2) ORDER BY vpn_id_expire DESC ";
            $result_vpnid_list = sql_query($sql_vpnid_list);
            for($i=0; $row_vpnid_list=sql_fetch_array($result_vpnid_list); $i++) {

                // 만료 시간을 타임존에 맞게 변환하여 표시
                $server_timezone = 'Asia/Seoul';
                $user_timezone = isset($app_timezone) ? $app_timezone : 'Asia/Seoul';

                $vpn_id_expire = $row_vpnid_list['vpn_id_expire'];
                $vpn_user_id = $row_vpnid_list['vpn_user_id'];
                $vpn_user_pwd = $row_vpnid_list['vpn_user_pwd']; // 일반 회원은 암호가 DB에 있다고 가정

                // 과거 데이터 보정: vpnid_list.vpn_user_id에 쇼핑몰 회원ID가 저장된 경우
                // 최신 프로비저닝 큐의 vpn_user_id를 사용하고 DB도 보정한다.
                if ($vpn_user_id === $mb_id) {
                    $server_name_for_fix = isset($row_vpnid_list['server_name']) ? trim($row_vpnid_list['server_name']) : '';
                    if ($server_name_for_fix !== '') {
                        $safe_mb = function_exists('sql_real_escape_string') ? sql_real_escape_string($mb_id) : addslashes($mb_id);
                        $safe_server = function_exists('sql_real_escape_string') ? sql_real_escape_string($server_name_for_fix) : addslashes($server_name_for_fix);
                        $q_fix = sql_fetch("SELECT vpn_user_id
                                           FROM app_ikev2_provision_queue
                                          WHERE mb_id = '{$safe_mb}'
                                            AND server_ip = '{$safe_server}'
                                            AND final_status = 'success'
                                          ORDER BY queue_id DESC
                                          LIMIT 1", false);
                        if (isset($q_fix['vpn_user_id']) && trim($q_fix['vpn_user_id']) !== '') {
                            $vpn_user_id = trim($q_fix['vpn_user_id']);
                            sql_query("UPDATE vpnid_list
                                          SET vpn_user_id = '" . (function_exists('sql_real_escape_string') ? sql_real_escape_string($vpn_user_id) : addslashes($vpn_user_id)) . "',
                                              remark = '{$safe_mb}',
                                              update_datetime = NOW()
                                        WHERE no = '" . (int)$row_vpnid_list['no'] . "'", false);
                        }
                    }
                }

                $expire_display = " Available until";

                try {
                    $datetime = new DateTime($vpn_id_expire, new DateTimeZone($server_timezone));
                    $datetime->setTimezone(new DateTimeZone($user_timezone));
                    $expire_time = $datetime->format("Y-m-d H:i:s") . $expire_display . "\n(" . $user_timezone . " Local Time)";
                } catch (Exception $e) {
                    $expire_time = date("Y-m-d H:i:s", strtotime($vpn_id_expire)) . $expire_display . "\n(" . $user_timezone . " Local Time)";
                }

                $display_country = isset($row_vpnid_list['country_name']) ? trim($row_vpnid_list['country_name']) : '';
                $country_upper = strtoupper($display_country);
                if ($country_upper === 'KOREA, REPUBLIC OF' || $country_upper === 'REPUBLIC OF KOREA' || $country_upper === 'SOUTH KOREA' || $country_upper === 'KR' || $country_upper === 'KOR') {
                    $display_country = 'KOREA';
                }
                if ($display_country === '') {
                    $display_country = '-';
                }

                $profiles[] = array(
                    "result" => "success",
                    "setName" => "VPNLink" . "-" . $display_country . "-" . $row_vpnid_list['no'] . "\n" . $expire_time,
                    "setGateway" => $row_vpnid_list['server_name'],
                    "setUsername" => $vpn_user_id,
                    "setPassword" => $vpn_user_pwd
                );

                if (function_exists('sync_strongswan_ipsec_secrets_vpnid')) {
                    sync_strongswan_ipsec_secrets_vpnid('paid',$row_vpnid_list['server_name'], $vpn_user_id, $vpn_user_pwd, $vpn_id_expire);
                }
            }
        }
    } catch (Exception $e) {
    }
}

// 메시지 목록 배열 생성 및 공지사항 읽음 상태 확인 후 공지를 또 띄울 건지 판단후 제공
if ($mb_id != "") {
    // DB에서 메시지 가져오기
    $messages = array();
    $vpn_msg_table = 'strongswan_vpn_msg';

    // 타겟 사용자 필터링 (free: 게스트 / paid: 일반회원)
    $target_condition = " AND (msg_target = 'all' ";
    if (isset($is_vpn_guest) && $is_vpn_guest) {
        $target_condition .= " OR msg_target = 'free') ";
    } else {
        $target_condition .= " OR msg_target = 'paid') ";
    }

    // 언어 필터링
    $lang_condition = " AND (msg_lang = 'all' OR msg_lang = '{$current_lang}') ";

    $current_datetime_msg = date('Y-m-d H:i:s', G5_SERVER_TIME);
    $sql_msg = "SELECT * FROM `{$vpn_msg_table}`
                WHERE msg_output = 1
                AND msg_begin_time <= '{$current_datetime_msg}'
                AND msg_end_time >= '{$current_datetime_msg}'
                {$target_condition}
                {$lang_condition}
                ORDER BY msg_order ASC, msg_id DESC";

    // 이모지 출력을 위해 utf8mb4 설정
    sql_query("set names utf8mb4");

    $result_msg = sql_query($sql_msg, false);
    if ($result_msg) {
        while ($row_msg = sql_fetch_array($result_msg)) {
            $msg_content = $row_msg['msg_content'];

            // 동영상 URL이 있으면 내용 앞에 추가
            if (!empty($row_msg['msg_video_url'])) {
                $video_url = trim($row_msg['msg_video_url']);
                $video_html = "";

                // YouTube URL인 경우 임베드 코드로 변환
                if (preg_match('/(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11})/i', $video_url, $matches)) {
                    $video_id = $matches[1];
                    // [수정] 앱 호환성을 위해 복잡한 CSS를 제거하고 고정 높이(height='250')와 단순한 스타일 사용
                    // playsinline=1: iOS 등에서 전체화면 대신 인라인 재생 유도
                    $video_html = "<div style='width:100%; margin-bottom:15px; text-align:center;'><iframe src='https://www.youtube.com/embed/{$video_id}?playsinline=1&rel=0&modestbranding=1' width='100%' height='250' frameborder='0' allow='accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture' allowfullscreen style='width:100%; max-width:100%;'></iframe></div>";
                }
                // 일반 동영상 파일 (mp4 등)인 경우 video 태그 사용
                else if (preg_match('/\.(mp4|webm|ogg)$/i', $video_url)) {
                    $video_html = "<div style='width:100%;margin-bottom:10px;'><video controls playsinline style='width:100%;height:auto;'><source src='{$video_url}' type='video/mp4'>Your browser does not support the video tag.</video></div>";
                }

                $msg_content = $video_html . $msg_content;
            }

            // 바로가기 링크 URL이 있으면 내용 전체를 링크로 감싸기
            if (!empty($row_msg['msg_link_url'])) {
                $link_url = trim($row_msg['msg_link_url']);
                // 스타일: block으로 만들어 내용 전체가 클릭되도록 함
                $msg_content = "<a href='{$link_url}' target='_blank' style='display:block; text-decoration:none; color:inherit;'>{$msg_content}</a>";
            }

            $messages[] = array(
                "result" => $row_msg['msg_type'],
                "id" => $row_msg['msg_id'],
                "title" => $row_msg['msg_title'],
                "message" => $msg_content
            );
        }
    }

    // 각 메시지에 대해 읽음 상태 확인
    if (isset($link) && is_object($link)) {
        foreach ($messages as $msg) {
            try {
                $stmt = $link->prepare("
                    SELECT dont_show_again
                    FROM strongswan_user_message_read_status_flag
                    WHERE mb_id = ? AND msg_id = ? AND dont_show_again = 1
                ");

                if ($stmt && $stmt->execute([$mb_id, $msg['id']])) {
                    $readStatus = $stmt->fetch();

                    // dont_show_again이 1이면 추가하지 않음
                    if ($readStatus) {
                        continue;
                    }
                }

                $profiles[] = array(
                    "result" => $msg['result'],
                    "id" => $msg['id'],
                    "title" => $msg['title'],
                    "message" => $msg['message']
                );
            } catch (Exception $e) {
                // 데이터베이스 오류 시에도 메시지는 표시
                $profiles[] = array(
                    "result" => $msg['result'],
                    "id" => $msg['id'],
                    "title" => $msg['title'],
                    "message" => $msg['message']
                );
            }
        }
    } else {
        // $link가 없으면 모든 메시지 표시
        foreach ($messages as $msg) {
            $profiles[] = array(
                "result" => $msg['result'],
                "id" => $msg['id'],
                "title" => $msg['title'],
                "message" => $msg['message']
            );
        }
    }
}

// JSON 출력은 strongswan_profile_check.php 에서 일괄 처리
?>
