using System.Collections.Generic;
using CounterDrone.Core.Models;

namespace CounterDrone.Core.Services
{
    /// <summary>想定管理服务</summary>
    public interface IScenarioService
    {
        // ═══ Scenario ═══
        Scenario CreateScenario(string name, string scenarioNumber);
        void DeleteScenario(string id);
        Scenario UpdateScenario(Scenario scenario);
        PagedResult<Scenario> SearchScenarios(string keyword, string? dateFrom, string? dateTo, int page, int pageSize);
        ScenarioConfig? GetScenarioDetail(string id);

        // ═══ CombatScene ═══
        void SaveScene(string scenarioId, CombatScene scene);
        CombatScene GetScene(string scenarioId);

        // ═══ ControlZone ═══
        void SaveControlZones(string scenarioId, List<ControlZone> zones);
        List<ControlZone> GetControlZones(string scenarioId);
        void DeleteControlZone(string id);

        // ═══ ScenarioDrone ═══
        ScenarioDrone SaveScenarioDrone(string scenarioId, ScenarioDrone drone);
        ScenarioDrone AddScenarioDrone(string scenarioId, ScenarioDrone drone);
        void UpdateScenarioDrone(ScenarioDrone drone);
        void DeleteScenarioDrone(string id);
        List<ScenarioDrone> GetScenarioDrones(string scenarioId);

        // ═══ ScenarioUnit ═══
        void SaveDeployment(string scenarioId, List<ScenarioUnit> equips);
        ScenarioUnit AddDeploymentUnit(string scenarioId, ScenarioUnit unit);
        void UpdateDeploymentUnit(ScenarioUnit unit);
        void DeleteDeploymentUnit(string id);
        List<ScenarioUnit> GetDeploymentUnits(string scenarioId);

        // ═══ Detection ═══
        void AddDetection(string scenarioId, ScenarioUnit detection);
        void DeleteDetection(string detectionId);
        List<ScenarioUnit> GetDetections(string scenarioId);

        // ═══ CloudDispersal ═══
        void SaveCloudDispersal(string scenarioId, CloudDispersal cloud);
        CloudDispersal GetCloudDispersal(string scenarioId);
        void DeleteCloudDispersal(string scenarioId);

        // ═══ Route & Waypoint ═══
        void SaveRoute(string scenarioId, string waveId, RoutePlan route, List<Waypoint> waypoints);
        List<RoutePlan> GetRoutes(string scenarioId);
        void DeleteRoute(string id);
        List<Waypoint> GetWaypoints(string scenarioId);
        List<Waypoint> GetWaypointsByWave(string scenarioId, string waveId);
        void DeleteWaypoint(string id);

        // ═══ Misc ═══
        void UpdateStep(string scenarioId, int step);

        /// <summary>返回所有枚举定义（供前端下拉框使用）</summary>
        EnumMetadata GetEnums();
    }
}
