package com.arms.api.aichat.controller;

import com.arms.api.aichat.domain.RecommendedCard;
import com.arms.api.aichat.service.RecommendedCardService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Mono;

import java.util.List;

@RestController
@RequestMapping("/auth-user/api/aichat/recommended-cards")
@RequiredArgsConstructor
@Slf4j
public class RecommendedCardController {

    private final RecommendedCardService recommendedCardService;

    @GetMapping
    public Mono<ResponseEntity<List<RecommendedCard>>> getCards() {
        List<RecommendedCard> cards = recommendedCardService.findAllCards();
        return Mono.just(ResponseEntity.ok(cards));
    }

    @GetMapping("/{cardId}")
    public Mono<ResponseEntity<RecommendedCard>> getCard(
            @PathVariable String cardId) {
        RecommendedCard card = recommendedCardService.findCardById(cardId);

        if (card == null) {
            return Mono.just(ResponseEntity.notFound().build());
        }

        return Mono.just(ResponseEntity.ok(card));
    }

    @PostMapping
    public Mono<ResponseEntity<RecommendedCard>> saveCard(
            @RequestBody RecommendedCard card) {
        log.info("Save recommended card");
        RecommendedCard saved = recommendedCardService.saveCard(card);
        return Mono.just(ResponseEntity.ok(saved));
    }

    @PutMapping("/{cardId}")
    public Mono<ResponseEntity<RecommendedCard>> updateCard(
            @PathVariable String cardId,
            @RequestBody RecommendedCard card) {
        log.info("Update recommended card: {}", cardId);
        RecommendedCard updated = recommendedCardService.updateCard(cardId, card);

        if (updated == null) {
            return Mono.just(ResponseEntity.notFound().build());
        }

        return Mono.just(ResponseEntity.ok(updated));
    }

    @DeleteMapping("/{cardId}")
    public Mono<ResponseEntity<Void>> deleteCard(
            @PathVariable String cardId) {
        log.info("Delete recommended card: {}", cardId);
        recommendedCardService.deleteCard(cardId);
        return Mono.just(ResponseEntity.ok().<Void>build());
    }

}
