/**
 * 请勿将俱乐部专享资源复制给任何人，保护知识产权即是保护我们所在的行业，进而保护我们自己的利益
 * 即便是公司的同事，也请尊重 JFinal 作者的努力与付出，不要复制给同事
 * <p>
 * 如果你尚未加入俱乐部，请立即删除该项目，或者现在加入俱乐部：http://jfinal.com/club
 * <p>
 * 俱乐部将提供 jfinal-club 项目源码、直播视频、专用 QQ 群，以及作者在俱乐部定期的分享与答疑，
 * 价值远比仅仅拥有 jfinal club 项目源代码要大得多，俱乐部福利资源是不断增加的，以下是俱乐部
 * 新福利计划：
 * https://jfinal.com/club/1-2
 * <p>
 * JFinal 俱乐部是七年以来首次寻求外部资源的尝试，以便于创建更加高品质的产品与服务，为你带来
 * 更多、更大的价值
 * <p>
 * JFinal 项目的可持续性发展需要你的支持！！！
 */

package com.jfinal.club._admin.ct;

import com.jfinal.aop.Before;
import com.jfinal.aop.Clear;
import com.jfinal.aop.Inject;
import com.jfinal.club.common.controller.BaseController;
import com.jfinal.club.common.model.Userct;
import com.jfinal.club.index.IndexService;
import com.jfinal.club.my.ct.UserCtService;
import com.jfinal.club.my.doc.UsersDocService;
import com.jfinal.kit.Ret;
import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.activerecord.Record;
import com.jfinal.upload.UploadFile;

import java.util.List;

/**
 * 项目管理控制器
 */
public class CtAdminController extends BaseController {


    @Inject
    IndexService indexSrv;

    @Inject
    CtAdminService ctAdminService;


    @Inject
    UserCtService userCtService;


    @Inject
    UsersDocService usersDocService;

    public void index() {
        String keyword = getPara("keyword");
        List<Record> records = usersDocService.docTypeList();
        setAttr("doctypes", records);
        Page<Userct> userctPage = ctAdminService.paginate(getParaToInt("p", 1), keyword);
        setAttr("userctPage", userctPage);
        setAttr("keyword", keyword);
        render("index.html");
    }

    /**
     * 创建
     */
    public void add() {
        List<Record> records = usersDocService.docTypeList();
        setAttr("doctypes", records);
        render("add_edit.html");
    }


    /**
     * 修改
     */
    public void edit() {
        keepPara("p");    // 保持住分页的页号，便于在 ajax 提交后跳转到当前数据所在的页
        keepPara("keyword");    // 保持住分页的页号，便于在 ajax 提交后跳转到当前数据所在的页
        Userct userct = userCtService.getCtById(getParaToInt("id"));
        setAttr("userct", userct);
        List<Record> records = usersDocService.docTypeList();
        setAttr("doctypes", records);
        render("add_edit.html");
    }

    public void delete() {
        Ret ret = userCtService.deleteById(getParaToInt("id"));
        renderJson(ret);
    }

    /**
     * 提交创建
     */
    @Before(CtAdminValidator.class)
    public void save() {
        UploadFile uf = null;
        String types = "";
        try {
            uf = getFile("filenames", usersDocService.getAvatarTempDir(), usersDocService.getAvatarMaxSize());
            types = getPara("types");
            if (uf == null) {
                renderJson(Ret.fail("msg", "请先选择上传文件"));
                return;
            }
        } catch (Exception e) {
            if (e instanceof com.jfinal.upload.ExceededSizeException) {
                renderJson(Ret.fail("msg", "文件大小超出范围"));
            } else {
                if (uf != null) {
                    // 只有出现异常时才能删除，不能在 finally 中删，因为后面需要用到上传文件
                    uf.getFile().delete();
                }
                renderJson(Ret.fail("msg", e.getMessage()));
            }
            return;
        }
        Userct userct = getModel(Userct.class);
        boolean keepLogin = false;
        if (userct.getAnonymous().equals(0)) {
            keepLogin = false;
        } else {
            keepLogin = true;
        }
        Ret ret = userCtService.uploadAvatar(1, uf);
        if (ret.isOk()) {
            String avatarUrl = ret.get("avatarUrl").toString();
            Ret ret1 = userCtService.saveCt(userct, avatarUrl, 1, keepLogin);
            renderJson(ret1);
            return;
        } else {
            renderJson(ret);
        }
    }


    /**
     * 提交修改
     */
    @Before(CtAdminValidator.class)
    public void update() {
        boolean update = getBean(Userct.class).removeNullValueAttrs( ).update( );
        if(update){
            renderJson(Ret.ok("msg", "修改成功"));
        }else{
            renderJson(Ret.ok("msg", "修改失败"));
        }
    }

    /**
     * 快捷方式
     * 推荐
     */
    public void tops_t(){
        Integer id = getInt("id");
        new Userct( ).dao( ).findById(id).set("tops", 1).removeNullValueAttrs( ).update( );
        index();

    }
    /**
     * 快捷方式
     * 取消推荐
     */
    public void tops_f(){
        Integer id = getInt("id");
        new Userct( ).dao( ).findById(id).set("tops", 0).removeNullValueAttrs( ).update( );
        index();
    }

    /**
     * 快捷方式
     * 审核成功
     */
    public void status_t(){
        Integer id = getInt("id");
        new Userct( ).dao( ).findById(id).set("status", 1).removeNullValueAttrs( ).update( );
        index();

    }
    /**
     * 快捷方式
     * 取消审核
     */
    public void status_f(){
        Integer id = getInt("id");
        new Userct( ).dao( ).findById(id).set("status", 0).removeNullValueAttrs( ).update( );
        index();
    }


    @Clear
    public void ceupload(){
        render("ceupload.html");
    }

    @Clear
    public void ceup(){
        UploadFile file = getFile( );
        System.out.println(file );
        renderJson(Ret.ok("msg",file));
    }

//    /**
//     * 锁定
//     */
//    public void lock() {
//        Ret ret = srv.lock(getParaToInt("id"));
//
//        projectSrv.clearHotProjectCache();
//        indexSrv.clearCache();
//        renderJson(ret);
//    }
//
//    /**
//     * 解除锁定
//     */
//    public void unlock() {
//        Ret ret = srv.unlock(getParaToInt("id"));
//
//        projectSrv.clearHotProjectCache();
//        indexSrv.clearCache();
//        renderJson(ret);
//    }
//
//    /**
//     * 删除 project
//     */
//    public void delete() {
//        Ret ret = srv.delete(getParaToInt("id"));
//        renderJson(ret);
//    }
}


