package kr.itn.itnhub.org;

import jakarta.validation.Valid;
import kr.itn.itnhub.provision.ChannelProvisionService;
import kr.itn.itnhub.provision.ProvisionResult;
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;

import java.util.List;

@RestController
@RequestMapping("/api/orgs")
public class OrganizationController {

    private final OrganizationService orgService;
    private final ChannelProvisionService provisionService;

    public OrganizationController(OrganizationService orgService,
                                  ChannelProvisionService provisionService) {
        this.orgService = orgService;
        this.provisionService = provisionService;
    }

    @GetMapping
    public List<OrgResponse> list() {
        return orgService.findAll();
    }

    @PutMapping("/{id}/contact")
    public OrgResponse updateContact(@PathVariable Long id,
                                     @Valid @RequestBody ContactRequest request) {
        return orgService.updateContact(id, request);
    }

    /**
     * 채널 2개를 보장한다. 부분 실패도 200으로 돌려주고 본문의 mj/law로 판단하게 한다.
     * 한쪽만 성공한 상태 자체가 정상적인 중간 상태이기 때문이다.
     */
    @PostMapping("/{id}/channels")
    public ProvisionResult provision(@PathVariable Long id) {
        return provisionService.provision(id);
    }
}
