using PrintBarCode.DTO;
using PrintBarCode.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

namespace PrintBarCode.Helper
{
    public class JsonParser
    {
        public static List<object> ParseJson(string jsonString)
        {
            try
            {
                // 解析外层的 JSON 字符串
                var output = JsonSerializer.Deserialize<Output>(jsonString);

                // 根据 template 字段选择不同的解析方式
                if (output.Template == "raw")
                {
                   
                    var rawBarCodeInfoList = JsonSerializer.Deserialize<List<RawBarCodeInfo>>(output.PrintContent);
                    //rawBarCodeInfoList.Add(new RawBarCodeInfo());
                    return rawBarCodeInfoList.Cast<object>().ToList();
                }
                else if (output.Template == "product")
                {
                   
                    var productBarCodeInfoList = JsonSerializer.Deserialize<List<ProductBarCodeInfo>>(output.PrintContent);
                   // productBarCodeInfoList.Add(new ProductBarCodeInfo());
                    return productBarCodeInfoList.Cast<object>().ToList();
                }
                else if(output.Template == "bind")
                { 
                    var bindBarCodeInfoList = JsonSerializer.Deserialize<List<BindBarCodeInfo>>(output.PrintContent);
                    //bindBarCodeInfoList.Add(new BindBarCodeInfo());
                    return bindBarCodeInfoList.Cast<object>().ToList();
                }
                else if(output.Template == "small")
                {
                    var smallCodeInfoList = JsonSerializer.Deserialize<List<SmallCodeInfo>>(output.PrintContent);
                   // smallCodeInfoList.Add(new SmallCodeInfo());
                    return smallCodeInfoList.Cast<object>().ToList();
                }
                else 
                {
                    return null;
                }
            }
            catch (JsonException ex)
            {
                Console.WriteLine($"Failed to parse JSON: {ex.Message}");
                return null;
            }
        }
    }
}
