using System;
using System.Linq;
using StandardScene.Utils;
using Newtonsoft.Json;
using SimpleCore;
using Simple3.CADTools;
using Simple3.RCS.CarTypes;
using StandardScene;
using StandardScene.Model;

namespace StandardScene.QrLidar.Cad
{
    /// <summary>
    /// 扫描全图带 tag 的站点生成二维码地图（码值 → 坐标/角度），写入 <see cref="ApiController.QrMap"/>
    /// 供 <c>/api/QrMap</c> 下发，并通知带 QrCar 标记的在线车辆刷新。
    /// 自 Core StandardCADTool.cs 迁入（scene.qrlidar 平台专属能力）。
    /// </summary>
    [CADToolDescriptor(name = "同步二维码地图到小车")]
    public class SyncQrMap : CADTool
    {
        public override async void Invoke()
        {
            var tagSites = SimpleLib.GetAllSites().Where(p => p.fields.ContainsKey("tag"));
            ApiController.QrMap.Clear();
            foreach (var tagSite in tagSites)
            {
                var tag = int.Parse(tagSite.fields["tag"]);
                var tagX = tagSite.x;
                var tagY = tagSite.y;
                var tagTh = tagSite.fields.TryGetValue("th", out var field) ? float.Parse(field) : 0f;
                if (ApiController.QrMap.ContainsKey(tag))
                {
                    FairyUiHelper.Alert("错误", $@"存在重复码值:{tag} 站点id为:{tagSite.id}");
                    return;
                }

                ApiController.QrMap[tag] = (tagX, tagY, tagTh);
            }

            ApiController.QrMapJson = JsonConvert.SerializeObject(ApiController.QrMap);
            var qrCars = SimpleLib.GetAllCars().Where(p => p.fields.ContainsKey("QrCar"));
            foreach (var qrCar in qrCars)
            {
                if(Commons.GetVehicleStatus((Car)qrCar) is VehicleStatus.Normal or VehicleStatus.NeedInit)
                    ((ClumsyCar)qrCar).ImmediateCommand("pilot.GetUpdateQrMap()");
            }
        }
    }
}
