package com.seer.teach.teacher.service.impl;

import cn.dev33.satoken.stp.StpUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.seer.teach.teacher.util.ModificationLogUtils;
import com.seer.teach.teacher.module.entity.MaterialEntity;
import com.seer.teach.teacher.module.mapper.MaterialMapper;
import com.seer.teach.teacher.service.MaterialService;
import org.springframework.stereotype.Service;

import java.io.Serializable;

/**
 * <p>
 * 教材表 服务实现类
 * </p>
 *
 * @author Wang
 * @since 2025-10-09 15:20:36
 */
@Service
public class MaterialServiceImpl extends ServiceImpl<MaterialMapper, MaterialEntity> implements MaterialService {

    @Override
    public boolean save(MaterialEntity entity) {
        // 记录新增教材日志
        boolean result = super.save(entity);
        if (result) {
            ModificationLogUtils.logModification(
                    3, // 教材类型
                    entity.getId(),
                    entity.getBookName(),
                    1, // 新增操作
                    null,
                    entity,
                    StpUtil.getLoginIdAsInt()
            );
        }
        return result;
    }

    @Override
    public boolean updateById(MaterialEntity entity) {
        // 获取修改前的数据
        MaterialEntity before = getById(entity.getId());
        
        // 更新数据
        boolean result = super.updateById(entity);
        
        // 记录修改日志
        if (result) {
            ModificationLogUtils.logModification(
                    3, // 教材类型
                    entity.getId(),
                    entity.getBookName(),
                    2, // 修改操作
                    before,
                    entity,
                    StpUtil.getLoginIdAsInt()
            );
        }
        return result;
    }

    @Override
    public boolean removeById(Serializable id) {
        // 获取删除前的数据
        MaterialEntity before = getById(id);
        
        // 删除数据
        boolean result = super.removeById(id);
        
        // 记录删除日志
        if (result && before != null) {
            ModificationLogUtils.logModification(
                    3, // 教材类型
                    (Integer) id,
                    before.getBookName(),
                    3, // 删除操作
                    before,
                    null,
                    StpUtil.getLoginIdAsInt()
            );
        }
        return result;
    }

}