package com.saas.tenant.controller;

import com.saas.tenant.entity.PhoneNumberRequest;
import com.saas.tenant.repository.PhoneNumberRequestRepository;
import com.saas.shared.core.TenantContext;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/tenant/phone-numbers")
@Tag(name = "Tenant - Phone Number Management", description = "Request and manage phone numbers")
@Slf4j
@RequiredArgsConstructor
public class TenantPhoneNumberController {

    private final PhoneNumberRequestRepository requestRepository;

    @PostMapping("/request")
    @Operation(summary = "Request a new phone number", description = "Submit a request for a new phone number assignment")
    @PreAuthorize("hasRole('ADMIN')") // Tenant Admin
    public ResponseEntity<PhoneNumberRequest> requestPhoneNumber(@RequestBody PhoneNumberRequest request) {
        String tenantId = TenantContext.getTenantId();
        log.info("📞 Received phone number request from tenant: {}", tenantId);

        request.setTenantId(tenantId);
        request.setStatus(PhoneNumberRequest.RequestStatus.PENDING);

        PhoneNumberRequest saved = requestRepository.save(request);
        return ResponseEntity.ok(saved);
    }

    @GetMapping("/requests")
    @Operation(summary = "Get my requests", description = "List all phone number requests for this tenant")
    @PreAuthorize("hasRole('ADMIN')")
    public ResponseEntity<List<PhoneNumberRequest>> getMyRequests() {
        String tenantId = TenantContext.getTenantId();
        return ResponseEntity.ok(requestRepository.findByTenantId(tenantId));
    }
}
