#pragma once
#include "global.h"


struct Flight_VTO {
    std::string icao; // 飞机身份标识（四字节十六进制代码）
    time_t time_stamp{}; // 时间（原始时间数据，可能需要翻译显示）
    bool mlat;
    RET<SSR::CPR::Position> pos; // 纬度（飞机的当前位置纬度）
    RET<double> track; // 航迹（航迹方向，单位：度）
    RET<double> speed; // 航速（单位：米/秒）
    RET<double> vert_speed; // 航速（单位：米/秒）
    RET<double> altitude; // 米
    RET<std::string> call_sign;
    RET<std::string> squawk;


    Psc::JSON toJson() {
        auto ret = Psc::JSON::object();
        ADD_Json(icao);
        ADD_Json(mlat);
        ret.children.emplace_back("time_stamp",  timeToString(time_stamp));
        if (pos.has_value())
        {
            ret.children.emplace_back("latitude", pos.value().lat);
            ret.children.emplace_back("longitude", pos.value().lon);
        } else
        {
            ret.children.emplace_back("latitude", nullptr);
            ret.children.emplace_back("longitude", nullptr);
        }
        ADD_Json_RET(track);
        ADD_Json_RET(speed);
        ADD_Json_RET(altitude);
        ADD_Json_RET(vert_speed);
        ADD_Json_RET(call_sign);
        ADD_Json_RET(squawk);
        return ret;
    }

    std::string timeToString(time_t time_stamp) {
        struct tm* utc_time = std::gmtime(&time_stamp); // 转换为 UTC 时间
        char buffer[80];

        // 使用 strftime 格式化时间为字符串
        std::strftime(buffer, sizeof(buffer), "%H:%M:%S", utc_time);

        return std::string(buffer);  // 返回格式化后的时间字符串
    }
    static Flight_VTO to_VTO(SSR::Aircraft_Info* info) {
        Flight_VTO vto;
        vto.icao = info->icao;
        vto.mlat = info->mlat;
        vto.time_stamp = info->timestamp;
        vto.speed = info->speed();
        // 这个地 是相对于地的意思
        vto.track = info->surface_magnetic_heading();
        // vto.pos = info->pos();
        vto.pos = info->air_pos_track_list.last();
        vto.altitude = info->altitude_meter();
        vto.vert_speed = info->vertical_rate();
        vto.call_sign = info->bds20_call_sign();
        vto.squawk = info->squawk();
        return vto;
    }
};

