package com.openhis.web.nenu.controller;

import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.core.common.core.domain.R;
import com.openhis.web.nenu.appservice.IGfStudentListAppService;
import com.openhis.web.nenu.dto.GfStudentListDto;

/**
 * 公费医疗-学生名单管理 Controller
 *
 * @author Thanking
 * @date 2025-10-21
 */
@RestController
@RequestMapping("/nenu/gf-student-list")
public class GfStudentListController {

    @Autowired
    private IGfStudentListAppService gfStudentListAppService;

    /**
     * 查询学生名单分页
     *
     * @param searchKey 模糊查询关键字
     * @param pageNo 页码
     * @param pageSize 行数
     * @return 学生名单分页
     */
    @GetMapping("/page")
    public R<IPage<GfStudentListDto>> getPage(GfStudentListDto searchParam,
        @RequestParam(value = "searchKey", defaultValue = "") String searchKey,
        @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
        @RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
        return gfStudentListAppService.getPage(searchParam, searchKey, pageNo, pageSize);
    }

    /**
     * 查询学生名单详情
     *
     * @param id ID
     * @return 学生名单详情
     */
    @GetMapping("/{id}")
    public R<GfStudentListDto> getDetail(@PathVariable(value = "id") Long id) {
        return gfStudentListAppService.getDetail(id);
    }

    /**
     * 添加学生名单
     *
     * @param gfStudentListDto 学生名单Dto
     * @return 结果
     */
    @PostMapping
    public R<?> add(@Validated @RequestBody GfStudentListDto gfStudentListDto) {
        return gfStudentListAppService.add(gfStudentListDto);
    }

    /**
     * 编辑学生名单
     *
     * @param gfStudentListDto 学生名单Dto
     * @return 结果
     */
    @PutMapping
    public R<?> edit(@Validated @RequestBody GfStudentListDto gfStudentListDto) {
        return gfStudentListAppService.edit(gfStudentListDto);
    }

    /**
     * 删除学生名单
     *
     * @param id ID
     * @return 结果
     */
    @DeleteMapping("/{id}")
    public R<?> delete(@PathVariable(value = "id") Long id) {
        return gfStudentListAppService.delete(id);
    }

    /**
     * 导入学生名单
     *
     * @param file 文件
     * @return 结果
     */
    @PostMapping("/import-data")
    public R<?> importData(MultipartFile file) {
        return gfStudentListAppService.importData(file);
    }

    /**
     * 获取导入模板
     *
     * @param response 响应
     */
    @PostMapping("/import-template")
    public void importTemplate(HttpServletResponse response) {
        gfStudentListAppService.importTemplate(response);
    }
}
