package de.oaa.xxx.meldung;

import de.oaa.xxx.user.UserRepository;
import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;

import java.security.Principal;
import java.util.UUID;

@RestController
@RequestMapping("/meldung")
public class MeldungController {

    private final MeldungRepository meldungRepository;
    private final UserRepository userRepository;

    public MeldungController(MeldungRepository meldungRepository, UserRepository userRepository) {
        this.meldungRepository = meldungRepository;
        this.userRepository = userRepository;
    }

    record MeldungRequest(MeldungZielTyp zielTyp, UUID zielId, String grund) {}

    @PostMapping
    @Transactional
    public ResponseEntity<Void> melden(@RequestBody MeldungRequest request, Principal principal) {
        var user = userRepository.findByEmail(principal.getName()).orElseThrow();
        if (meldungRepository.existsByMelderIdAndZielTypAndZielId(user.getUserId(), request.zielTyp(), request.zielId())) {
            return ResponseEntity.status(409).build();
        }
        meldungRepository.save(MeldungEntity.create(user.getUserId(), request.zielTyp(), request.zielId(), request.grund()));
        return ResponseEntity.status(201).build();
    }
}
