<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가

// [1] 무조건 실행되는 로직: 누가 오든 국가 정보와 로봇 정보를 파악해서 DB에 기록함
$remote_addr = $_SERVER['REMOTE_ADDR'];
$user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? strtolower($_SERVER['HTTP_USER_AGENT']) : '';
$lo_country = '';
$lo_bot = '';

// 1-1. 로봇 판별
$bots = array('googlebot', 'naverbot', 'daum', 'bingbot', 'slurp', 'duckduckbot', 'baiduspider', 'yandexbot', 'bot', 'crawler', 'spider');
foreach($bots as $bot) {
    if (strpos($user_agent, $bot) !== false) {
        $lo_bot = $bot;
        break;
    }
}

// 1-2. 국가 정보 가져오기 (로봇이 아닐 때만 API 호출해서 횟수 아낌)
if(!$lo_bot && $remote_addr !== '127.0.0.1' && $remote_addr !== '::1') {
    $ctx = stream_context_create(array('http' => array('timeout' => 1))); 
    $geoip_res = @file_get_contents("http://ip-api.com/json/{$remote_addr}?fields=countryCode", false, $ctx);
    if($geoip_res) {
        $geoip_data = json_decode($geoip_res, true);
        $lo_country = isset($geoip_data['countryCode']) ? strtolower($geoip_data['countryCode']) : '';
    }
}

// 1-3. 현재 접속자 테이블(g5_login) 무조건 업데이트
sql_query(" update {$g5['login_table']} set lo_country = '{$lo_country}', lo_bot = '{$lo_bot}' where lo_ip = '{$remote_addr}' ");


// [2] 그누보드 기본 로직: 오늘 처음 온 방문자라면 통계 테이블에 기록함
if (get_cookie('ck_visit_ip') != $_SERVER['REMOTE_ADDR'])
{
    set_cookie('ck_visit_ip', $_SERVER['REMOTE_ADDR'], 86400); // 하루동안 저장

    $remote_addr = escape_trim($_SERVER['REMOTE_ADDR']);
    $referer = isset($_SERVER['HTTP_REFERER']) ? escape_trim(clean_xss_tags(strip_tags($_SERVER['HTTP_REFERER']))) : "";
    $user_agent_full = escape_trim(clean_xss_tags(strip_tags($_SERVER['HTTP_USER_AGENT'])));
    
    $vi_browser = '';
    $vi_os = '';
    $vi_device = '';
    if(version_compare(phpversion(), '5.3.0', '>=') && defined('G5_BROWSCAP_USE') && G5_BROWSCAP_USE) {
        include_once(G5_BBS_PATH.'/visit_browscap.inc.php');
    }

    // 방문자 테이블에 기록
    $sql = " insert {$g5['visit_table']} ( vi_ip, vi_date, vi_time, vi_referer, vi_agent, vi_browser, vi_os, vi_device ) values ( '{$remote_addr}', '".G5_TIME_YMD."', '".G5_TIME_HIS."', '{$referer}', '{$user_agent_full}', '{$vi_browser}', '{$vi_os}', '{$vi_device}' ) ";
    $result = sql_query($sql, FALSE);

    if ($result) {
        $sql = " insert {$g5['visit_sum_table']} ( vs_count, vs_date) values ( 1, '".G5_TIME_YMD."' ) ";
        $result = sql_query($sql, FALSE);

        if (!$result) {
            $sql = " update {$g5['visit_sum_table']} set vs_count = vs_count + 1 where vs_date = '".G5_TIME_YMD."' ";
            $result = sql_query($sql);
        }

        // 방문자수 합계 계산 및 환경설정 업데이트
        $sql = " select vs_count as cnt from {$g5['visit_sum_table']} where vs_date = '".G5_TIME_YMD."' ";
        $row = sql_fetch($sql);
        $vi_today = isset($row['cnt']) ? $row['cnt'] : 0;

        $sql = " select vs_count as cnt from {$g5['visit_sum_table']} where vs_date = DATE_SUB('".G5_TIME_YMD."', INTERVAL 1 DAY) ";
        $row = sql_fetch($sql);
        $vi_yesterday = isset($row['cnt']) ? $row['cnt'] : 0;

        $sql = " select max(vs_count) as cnt from {$g5['visit_sum_table']} ";
        $row = sql_fetch($sql);
        $vi_max = isset($row['cnt']) ? $row['cnt'] : 0;

        $sql = " select sum(vs_count) as total from {$g5['visit_sum_table']} ";
        $row = sql_fetch($sql);
        $vi_sum = isset($row['total']) ? $row['total'] : 0;

        $visit = '오늘:'.$vi_today.',어제:'.$vi_yesterday.',최대:'.$vi_max.',전체:'.$vi_sum;
        sql_query(" update {$g5['config_table']} set cf_visit = '{$visit}' ");
    }
}