package fr.teamflash.fencerjudgeback.restControllers

import fr.teamflash.fencerjudgeback.entities.MatchState
import fr.teamflash.fencerjudgeback.entities.RefereeBean
import fr.teamflash.fencerjudgeback.entities.RefereeLevel
import fr.teamflash.fencerjudgeback.services.RefereeService
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.CrossOrigin
import org.springframework.web.bind.annotation.DeleteMapping
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.PathVariable
import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.PutMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController

@RestController
@CrossOrigin(origins = ["*"])
@RequestMapping("/referees")
class RefereeRestController(private val refereeService: RefereeService) {

    // Lister tous les arbitres
    @GetMapping("/")
    fun getAll() : ResponseEntity<List<RefereeBean>> {
        return ResponseEntity.ok(refereeService.getAll())
    }

    // Afficher un arbitre par id
    @GetMapping("/{id}")
    fun getById(@PathVariable id: Long): ResponseEntity<RefereeBean?> {
        return ResponseEntity.ok(refereeService.getById(id))
    }

    // Afficher un ou plusieurs arbitre(s) par nom
    @GetMapping("/name/{name}")
    fun getByName(@PathVariable name:String): ResponseEntity<List<RefereeBean?>?> {
        return ResponseEntity.ok(refereeService.getByName(name))
    }

    // Afficher un ou plusieurs arbitre(s) par prénom
    @GetMapping("/firstname/{firstName}")
    fun getByFirstName(@PathVariable firstName:String): ResponseEntity<List<RefereeBean?>?> {
        return ResponseEntity.ok(refereeService.getByFirstName(firstName))
    }

    // Afficher un ou plusieurs arbitre(s) par niveau
    @GetMapping("/level/{level}")
    fun getByQualification(@PathVariable level: RefereeLevel): ResponseEntity<List<RefereeBean?>?> {
        return ResponseEntity.ok(refereeService.getByLevel(level))
    }

    // Ajouter un arbitre
    @PostMapping("/create-referee")
    fun createReferee(@RequestBody referee: RefereeBean): ResponseEntity<RefereeBean> {
        return ResponseEntity.ok(refereeService.createReferee(referee))
    }

    // Modifier un arbitre
    @PutMapping("/update-referee/{id}")
    fun updateReferee(@PathVariable id: Long, @RequestBody referee: RefereeBean) : ResponseEntity<Int> {
        return ResponseEntity.ok(refereeService.updateReferee(id, referee))
    }

    // Supprimer un arbitre
    @DeleteMapping("/delete-referee/{id}")
    fun deleteReferee(@PathVariable id:Long): ResponseEntity<Int> {
        return ResponseEntity.ok(refereeService.deleteRefereeById(id))
    }

}
