<?php
/*
 * @author: CloudZA(云之安) <2922619853@qq.com>
 * @hitokoto: 一场秋雨一场凉，秋心酌满泪为霜。
 * Copyright (c) 2022 by CloudZA, All Rights Reserved.
 */

include_once 'common.php';
if ( !isset($islogin)) header("Location: /");//非法访问
$act = isset($_GET[ 'act' ]) ? purge($_GET[ 'act' ]) : '';
if ($act === 'pwd') {
    $data[ 'a' ] = isset($_POST[ 'a' ]) ? purge($_POST[ 'a' ]) : '';
}

// 授权设置
if ($act === 'auth') {
    $appid                     = isset($_POST[ 'appid' ]) ? purge($_POST[ 'appid' ]) : '';
    $data[ 'isauth' ]          = $_POST[ 'isauth' ] ?? '';
    $data[ 'price' ]           = isset($_POST[ 'price' ]) ? purge($_POST[ 'price' ]) : '';
    $data[ 'replaces' ]        = isset($_POST[ 'replaces' ]) ? purge($_POST[ 'replaces' ]) : '';
    $data[ 'auth_user_money' ] = isset($_POST[ 'auth_user_money' ]) ? purge($_POST[ 'auth_user_money' ]) : '';
    $res                       = Db::table('app_auth')
                                   ->where(['appid' => $appid])
                                   ->update($data);
    if ($res) {
        exit(return_msg(200 , '保存成功'));
    } else {
        exit(return_msg(201 , '保存失败'));
    }
}


// 应用配置
if ($act === 'app_set') {
    $appid                    = isset($_POST[ 'appid' ]) ? purge($_POST[ 'appid' ]) : '';
    $data[ 'app_name' ]       = isset($_POST[ 'app_name' ]) ? purge($_POST[ 'app_name' ]) : '';
    $data[ 'app_des' ]        = isset($_POST[ 'app_des' ]) ? purge($_POST[ 'app_des' ]) : '';
    $data[ 'app_ver' ]        = isset($_POST[ 'app_ver' ]) ? purge($_POST[ 'app_ver' ]) : '';
    $data[ 'app_dir' ]        = isset($_POST[ 'app_dir' ]) ? purge($_POST[ 'app_dir' ]) : '';
    $data[ 'app_update_dir' ] = isset($_POST[ 'app_update_dir' ]) ? purge($_POST[ 'app_update_dir' ]) : '';
    $data[ 'app_update' ]     = isset($_POST[ 'app_update' ]) ? purge($_POST[ 'app_update' ]) : '0';
    $data[ 'app_preview' ]    = isset($_POST[ 'app_preview' ]) ? purge($_POST[ 'app_preview' ]) : '0';
    $data[ 'app_status' ]     = isset($_POST[ 'app_status' ]) ? purge($_POST[ 'app_status' ]) : '0';

    if (empty($data[ 'app_name' ]) || empty($data[ 'app_des' ]) || empty($data[ 'app_ver' ]) || empty($data[ 'app_dir' ]) || empty($data[ 'app_update_dir' ])) {
        exit(ReturnError('数据不完整'));
    }
    if (Db::table('app_config')
          ->where(['appid' => $appid])
          ->update($data)) {
        exit(ReturnSuccess('保存成功'));
    } else {
        exit(ReturnError('保存失败'));
    }
}

// 渲染所有版本
if ($act === 'versionAllView') {
    $res = Db::table('app_update')
             ->order('update_time desc')
             ->select();
    if ($res) {
        exit(return_msg(200 , 'success' , [
            'list' => $res
        ]));
    } else {
        exit(return_msg(201 , 'error' , [
            'list' => []
        ]));
    }
}

// 渲染更新日志

if ($act === 'updateLogView') {
    $res = Db::table('app_update')
             ->where(['appid' => 1000])
             ->order('update_time desc')
             ->select();
    if ($res) {
        exit(return_msg(200 , 'success' , [
            'list' => $res
        ]));
    } else {
        exit(return_msg(201 , 'errer' , [
            'list' => []
        ]));
    }
}


// 更新应用版本
if ($act === 'app_update') {
    $APPID         = isset($_POST[ 'APPID' ]) ? purge($_POST[ 'APPID' ]) : '';
    $appName       = isset($_POST[ 'appName' ]) ? purge($_POST[ 'appName' ]) : '';
    $newVer        = isset($_POST[ 'newVer' ]) ? purge($_POST[ 'newVer' ]) : '';
    $updateContent = $_POST[ 'updateContent' ] ?? '';
    $app_status    = isset($_POST[ 'app_status' ]) ? purge($_POST[ 'app_status' ]) : '1';

    // 判断文件是否上传
    if (empty($_FILES[ 'appReleaseFile' ])) {
        exit(return_msg(400 , '请上传完整包'));
    }
    // 判断文件是否上传
    if (empty($_FILES[ 'appUpdateFile' ])) {
        exit(return_msg(400 , '请上传更新包'));
    }
    // 判断表单是否完整
    if (empty($APPID) || empty($appName) || empty($newVer) || empty($updateContent)) {
        exit(ReturnError('数据不完整'));
    } else if ( !Db::table('app_update')
                   ->add([
                       'appname'     => $appName ,
                       'appid'       => $APPID ,
                       'version'     => $newVer ,
                       'update_log'  => $updateContent ,
                       'update_time' => date('Y-m-d :H:i:s') ,
                       'status'      => $app_status
                   ])) {
        exit(ReturnError('数据写入失败'));
    }
    // 检查目标目录是否存在
    if ( !file_exists(__UpdatePath__)) {
        // 如果解压目标目录不存在，则创建目录
        if ( !mkdir(__UpdatePath__ , 0755 , true)) {
            exit(return_msg(500 , '创建解压目标目录失败'));
        }
    }

    // 移动上传的更新包文件到指定位置
    $updateFileName = $_FILES[ 'appUpdateFile' ][ 'name' ];
    if ( !move_uploaded_file($_FILES[ 'appUpdateFile' ][ 'tmp_name' ] , __CachePackagePath__ . '/' . $updateFileName)) {
        exit(return_msg(500 , '移动更新包失败'));
    }

    // 移动上传的完整包文件到指定位置
    $releaseFileName = $_FILES[ 'appReleaseFile' ][ 'name' ];
    if ( !move_uploaded_file($_FILES[ 'appReleaseFile' ][ 'tmp_name' ] , __CachePackagePath__ . '/' . $releaseFileName)) {
        exit(return_msg(500 , '移动完整包失败: '));
    }

    // 解压更新包文件到指定目录
    if ( !FileUtil::unzip(__CachePackagePath__ . '/' . $updateFileName , __UpdatePath__)) {
        // 解压缩失败则删除上传的文件
        deleteUploadFile(__CachePackagePath__ . '/' . $updateFileName);
        exit(return_msg(500 , '更新包解压缩失败'));
    }

    // 解压完整包文件到指定目录
    if ( !FileUtil::unzip(__CachePackagePath__ . '/' . $releaseFileName , __ReleasePath__)) {
        // 解压缩失败则删除上传的文件
        deleteUploadFile(__CachePackagePath__ . '/' . $releaseFileName);
        exit(return_msg(500 , '完整包解压缩失败'));
    }

    // 删除上传的更新包压缩文件
    deleteUploadFile(__CachePackagePath__ . '/' . $updateFileName);

    // 删除上传的完整压缩文件
    deleteUploadFile(__CachePackagePath__ . '/' . $releaseFileName);

    exit(ReturnSuccess('新版本发布成功'));

}


// 更新应用版本状态
if ($act === 'update_appStatus') {
    $id         = isset($_POST[ 'UID' ]) ? purge($_POST[ 'UID' ]) : '';
    $app_status = isset($_POST[ 'status' ]) ? purge($_POST[ 'status' ]) : '0';
    if (Db::table('app_update')
          ->where(['id' => $id])
          ->update(['status' => $app_status])) {
        exit(ReturnSuccess('更新成功'));
    } else {
        exit(ReturnError('更新失败'));
    }
}

if($act === 'del'){
    $id         = isset($_POST[ 'UID' ]) ? purge($_POST[ 'UID' ]) : '';
    if(Db::table('app_update')->where(['id'=>$id])->del()){
        exit(ReturnSuccess('删除成功'));
    } else {
        exit(ReturnError('删除失败'));
    }
}