@using Dynamicweb.Rendering;
@using Dynamicweb.Ecommerce.ProductCatalog;
@using System.Collections.Generic;
@using System.Text;
@using System.Linq;
@using Dynamicweb.Ecommerce;
@using Dynamicweb.Ecommerce.Services;
@inherits ViewModelTemplate<ProductListViewModel>
 
@{
    string languageId = Dynamicweb.Core.Converter.ToString(
        Dynamicweb.Context.Current.Request.QueryString["languageId"]) ?? "LANG1";
}
 
@functions
{
    public class Field
    {
        public string ID { get; set; }
        public string Label { get; set; }
 
        public Field(string id, string label)
        {
            ID = id;
            Label = label;
        }
    }
 
    public List<Field> GetFields()
    {
        return new List<Field>
        {
            new Field("Id", "Product Id"),
            new Field("VariantId", "Variant Id"),
            new Field("Number", "Number"),
            new Field("Name", "Name"),
            new Field("GroupPaths", "GroupPaths"),
            new Field("LanguageId", "LanguageId"),
            new Field("VarientName", "VarientName"),
            new Field("ProductGroup", "ProductGroup"),
        };
    }
 
    public string GenerateCsv(string currentLanguageId)
    {
        var fields = GetFields();
        var headerSystemNames = fields.Select(f => f.ID).ToList();
 
        var contentBuilder = new StringBuilder();
        contentBuilder.Append(Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble()));
 
        // Generate CSV header
        contentBuilder.AppendLine(string.Join(";", fields.Select(f => $"\"{f.Label}\"")));
 
        // Generate CSV rows
        foreach (var product in Model.Products)
        {
            var values = new string[headerSystemNames.Count];
            for (int i = 0; i < fields.Count; i++)
            {
                values[i] = GetFieldValue(product, fields[i].ID, currentLanguageId);
            }
 
            contentBuilder.AppendLine(string.Join(";", values.Select(v => "\"" + v.Replace("\"", "'") + "\"")));
        }
 
        return contentBuilder.ToString();
    }
 
    public string GetFieldValue(ProductViewModel product, string fieldId, string currentLanguageId)
    {
        switch (fieldId)
        {
            case "Id":
                return product.Id ?? "";
            case "VariantId":
                return product.VariantId ?? "";
            case "Number":
                return product.Number ?? "";
             case "Name":
                return product.Name ?? "";
                //test
            case "GroupPaths":
                try {
                    if (product.GroupPaths != null) {
                        string groupPath = string.Join("|", product.GroupPaths.SelectMany(gr => gr).Select(item => item.Name));
                        return groupPath;
                    }
                } catch {}
                return "";
            case "LanguageId":
                return currentLanguageId;
            case "VarientName":
                return product.VariantName ?? "";
                //test
            case "ProductGroup":
               return Dynamicweb.Ecommerce.Services.Groups.GetGroup("Group1").Name;
                return "";              
            default:
                return "";
        }
    }
}
 
@GenerateCsv(languageId)