package com.example.demo.controller;

import com.example.demo.service.IntegrationService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * 系统对接集成控制器。
 * 提供标准化接口定义、第三方数据对接导入推送、数据同步等 RESTful API 接口。
 */
@RestController
@RequestMapping("/api/integration")
@Tag(name = "系统对接集成", description = "标准化接口、数据对接导入推送、数据同步接口（IMS-IF-EXT）")
public class IntegrationController {

    private final IntegrationService integrationService;

    public IntegrationController(IntegrationService integrationService) {
        this.integrationService = integrationService;
    }

    /**
     * 获取标准化接口定义列表。
     *
     * @requirement(name="标准化接口预留", id="SRS-IMS_F-027")
     *
     * @return 接口定义列表
     */
    @GetMapping("/api-definitions")
    @Operation(summary = "获取接口定义", description = "获取系统对外标准化API接口定义列表")
    public List<Map<String, Object>> getApiDefinitions() {
        return integrationService.getApiDefinitions();
    }

    /**
     * 第三方数据导入。
     *
     * @requirement(name="第三方数据对接", id="SRS-IMS_F-028")
     *
     * @param data 导入的数据
     * @return 导入结果
     */
    @PostMapping("/import")
    @Operation(summary = "数据导入", description = "第三方系统导入数据到IMS")
    public Map<String, Object> importData(@RequestBody List<Map<String, Object>> data) {
        return integrationService.importData(data);
    }

    /**
     * 数据推送至第三方。
     *
     * @requirement(name="第三方数据对接", id="SRS-IMS_F-028")
     *
     * @param targetSystem 目标系统
     * @param data         推送数据
     * @return 推送结果
     */
    @PostMapping("/push")
    @Operation(summary = "数据推送", description = "将IMS数据推送到第三方系统")
    public Map<String, Object> pushData(
            @Parameter(description = "目标系统标识") @RequestParam String targetSystem,
            @RequestBody Map<String, Object> data) {
        return integrationService.pushData(targetSystem, data);
    }

    /**
     * 执行数据同步。
     *
     * @requirement(name="数据同步", id="SRS-IMS_F-029")
     *
     * @param syncType  同步类型（timed/realtime，可选）
     * @param direction 同步方向（import/export/bidirectional，可选）
     * @return 同步结果
     */
    @PostMapping("/sync")
    @Operation(summary = "数据同步", description = "执行定时或实时数据同步任务")
    public Map<String, Object> syncData(
            @Parameter(description = "同步类型(timed/realtime)") @RequestParam(required = false) String syncType,
            @Parameter(description = "同步方向(import/export/bidirectional)") @RequestParam(required = false) String direction) {
        return integrationService.syncData(syncType, direction);
    }
}
