package com.TinyPro.controller;

import com.TinyPro.annotation.PermissionAnnotation;
import com.TinyPro.annotation.Reject;
import com.TinyPro.entity.dto.CreatePermissionDto;
import com.TinyPro.entity.dto.UpdatePermissionDto;
import com.TinyPro.entity.page.PageWrapper;
import com.TinyPro.entity.po.Permission;
import com.TinyPro.entity.vo.PermissionVo;
import com.TinyPro.service.IPermissionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/permission")
public class PermissionController {
    @Autowired
    private IPermissionService iPermissionService;

    @PostMapping()
    @Reject()
    @PermissionAnnotation("permission::add")
    public ResponseEntity<PermissionVo> create(@RequestBody CreatePermissionDto createPermissionDto) {
        boolean b = false;
        return iPermissionService.create(createPermissionDto, b);
    }

    @PatchMapping()
    @Reject
    @PermissionAnnotation("permission::update")
    public ResponseEntity<PermissionVo> updatePermission(@RequestBody UpdatePermissionDto updatePermissionDto) {
        return iPermissionService.updatePermission(updatePermissionDto);
    }

    @GetMapping
    @PermissionAnnotation("permission::get")
    public ResponseEntity<?> findPermissions(
            @RequestParam(required = false) Integer page,
            @RequestParam (required = false)Integer limit,
            @RequestParam(required = false) String name) {
        if (page == null && limit == null){
            List<Permission> permissionList= iPermissionService.findAllPermission();
            return ResponseEntity.ok(permissionList);
        }
        return iPermissionService.findPermissions(page, limit, name);
    }

    @DeleteMapping("/{id}")
    @Reject()
    @PermissionAnnotation("permission::remove")
    public ResponseEntity<CreatePermissionDto> del(@PathVariable Integer id) {
        return iPermissionService.delPermission(id);
    }
}
