package com.school.project.controller;


import com.school.project.dto.userRegistration.AdminRegistrationDTO;
import com.school.project.dto.userRegistration.StudentRegistrationDTO;
import com.school.project.dto.userRegistration.TeacherRegistrationDTO;
import com.school.project.dto.userRegistration.UserRegistrationDTO;
import com.school.project.service.userRegistration.admin.AdminRegistrationService;
import com.school.project.service.userRegistration.student.StudentRegistrationService;
import com.school.project.service.userRegistration.teacher.TeacherRegistrationService;
import lombok.Getter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.server.ResponseStatusException;

@RestController
@RequestMapping("/register")
public class RegistrationController {

    @Autowired
    private StudentRegistrationService studentRegistrationService;

    @Autowired
    private TeacherRegistrationService teacherRegistrationService;

    @Autowired
    private AdminRegistrationService adminRegistrationService;

    @PostMapping("/student")
    public ResponseEntity<UserRegistrationDTO> registerStudent(@RequestBody StudentRegistrationDTO student) {
        try {
            UserRegistrationDTO userDTO = studentRegistrationService.registerStudent(student);
            return ResponseEntity.ok(userDTO);
        } catch (Exception e) {
            throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Data is not correct", e);
        }
    }

    @PostMapping("/teacher")
    public ResponseEntity<UserRegistrationDTO> registerTeacher(@RequestBody TeacherRegistrationDTO teacher) {
        try {
            UserRegistrationDTO userDTO = teacherRegistrationService.registerTeacher(teacher);
            return ResponseEntity.ok(userDTO);
        } catch (Exception e) {
            throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Data is not correct", e);
        }
    }

    @PostMapping("/admin")
    public ResponseEntity<UserRegistrationDTO> registerAdmin(@RequestBody AdminRegistrationDTO admin) {
        try {
            UserRegistrationDTO userDTO = adminRegistrationService.registerAdmin(admin);
            return ResponseEntity.ok(userDTO);
        } catch (Exception e) {
            throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Data is not correct", e);
        }
    }
}