package com.jy.system.dao;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jy.framework.model.base.BaseDao;
import com.jy.framework.model.constants.CommonConstant;
import com.jy.framework.satoken.LoginContext;
import com.jy.system.mapper.SysConfigMapper;
import com.jy.system.model.dto.SysConfigSelectDto;
import com.jy.system.model.entity.SysConfig;
import com.jy.system.model.table.SysConfigTable;
import com.jy.system.model.vo.SysConfigVo;
import org.springframework.stereotype.Service;

@Service
public class SysConfigDao extends BaseDao<SysConfigMapper, SysConfig> {

    /**
     * 全局配置分页
     */
    public Page<SysConfigVo> getPage(SysConfigSelectDto dto) {
        SysConfigTable sc = SysConfigTable.sc;

        return sql(SysConfigVo.class)
                .select(
                        sc.id,
                        sc.code,
                        sc.name,
                        sc.value,
                        sc.builtin,
                        sc.remark
                )
                .from(sc)
                .where(
                        sc.builtin.eq(LoginContext.isSupperAdmin() ? dto.getBuiltin() : CommonConstant.NO),
                        sc.code.like(dto.getCode()),
                        sc.name.like(dto.getName())
                )
                .orderBy(
                        sc.id.desc()
                )
                .page(dto.getPage());
    }

    /**
     * 全局配置详情
     */
    public SysConfigVo getDetail(Long id) {
        SysConfigTable sc = SysConfigTable.sc;

        return sql(SysConfigVo.class)
                .select(
                        sc.id,
                        sc.code,
                        sc.name,
                        sc.value,
                        sc.builtin,
                        sc.remark
                )
                .from(sc)
                .where(sc.id.eq(id))
                .one();
    }

    /**
     * 配置编码是否存在
     */
    public boolean codeExists(String code) {
        return lambdaQuery().eq(SysConfig::getCode, code).exists();
    }

    /**
     * 配置编码是否存在（排除id）
     */
    public boolean codeExists(String code, Long exclusionId) {
        return lambdaQuery().eq(SysConfig::getCode, code).ne(SysConfig::getId, exclusionId).exists();
    }

}
