<?php
namespace sammo;

include 'lib.php';
include 'func.php';

$session = Session::requireGameLogin([])->setReadOnly();
$userID = $session::getUserID();
$serverID = UniqueConst::$serverID;

$image = $_FILES['img'];
switch ($image['error']) {
    case UPLOAD_ERR_OK:
        break;
    case UPLOAD_ERR_NO_FILE:
        Json::die([
            'result'=>false,
            'reason'=>'파일이 없습니다.'
        ]);
    case UPLOAD_ERR_INI_SIZE:
    case UPLOAD_ERR_FORM_SIZE:
        Json::die([
            'result'=>false,
            'reason'=>'업로드된 파일이 지나치게 큽니다.'
        ]);
    default:
        Json::die([
            'result'=>false,
            'reason'=>'업로드되지 않았습니다.'
        ]);
}

if(!is_uploaded_file($image['tmp_name'])) {
    Json::die([
        'result'=>false,
        'reason'=>'제대로 파일이 업로드되지 않았습니다.'
    ]);
}

if($image['size'] > 1048576) {
    //파일크기 검사
    Json::die([
        'result'=>false,
        'reason'=>'1MB 이하로 올려주세요!'
    ]);
}

$size = getImageSize($image['tmp_name']);

$imageType = $size[2];
$availableImageType = array('.jpg'=>IMAGETYPE_JPEG, '.png'=>IMAGETYPE_PNG, '.gif'=>IMAGETYPE_GIF);
$newExt = array_search($imageType, $availableImageType, true);

if(!$newExt) {
    Json::die([
        'result'=>false,
        'reason'=>'jpg, gif, png 파일이 아닙니다!'
    ]);
}

$db = RootDB::db();
$imgStor = KVStorage::getStorage($db, 'img_storage');

$picName = hash_file('md5', $image['tmp_name']);
$newPicName = "$picName$newExt";

$destDir = AppConf::getUserIconPathFS().'/uploaded_image';
$dest = $destDir.'/'.$newPicName;

if(!file_exists($dest)){
    if (!file_exists($destDir)) {
        mkdir($destDir);
    }
    if(!is_dir($destDir)) {
        Json::die([
            'result'=>false,
            'reason'=>'버그! 업로드 경로 확인!'
        ]);
    }
    if(!is_writable($destDir)){
        Json::die([
            'result'=>false,
            'reason'=>'버그! 업로드 권한 확인!'
        ]);
    }
    
    $dest = $destDir.'/'.$newPicName;
    
    if(!move_uploaded_file($image['tmp_name'], $dest)) {
        Json::die([
            'result'=>false,
            'reason'=>'업로드에 실패했습니다!'
        ]);
    }
}

$storedStatus = $imgStor->$newPicName??[];
$imgKey = "$serverID:$userID";
if(!key_exists($imgKey, $storedStatus)){
    $storedStatus[$imgKey] = TimeUtil::DatetimeNow();
}

$imgStor->$newPicName = $storedStatus;

Json::die([
    'result'=>true,
    'reason'=>'성공',
    'path'=>AppConf::getUserIconPathWeb().'/uploaded_image/'.$newPicName
]);