using System.Linq;
using System.Text;
using Windows.ApplicationModel.DataTransfer;

namespace Sonex.UserControls.DataGridView
{
    public sealed partial class DataGridView
    {
        public void SelectToClipboard(bool withHeaders)
        {
            // 1) wybrane kolumny (trzymaj kolejność z gridu)
            var selectedCols = _Columns
                .Where(c => c.isSelected)
                .OrderBy(c => c.Index)   // jeśli masz Index; jak nie, usuń
                .ToList();

            if (selectedCols.Count == 0 || _SelectedRows == null || _SelectedRows.CountSelected() == 0)
                return;

            var sb = new StringBuilder(capacity: 1024);

            // 2) (opcjonalnie) nagłówki
            // Jeśli nie chcesz nagłówków, usuń ten blok
            if (withHeaders)
            {
                for (int i = 0; i < selectedCols.Count; i++)
                {
                    if (i > 0) sb.Append('\t');
                    sb.Append(NormalizeCell(selectedCols[i].Title));
                }
                sb.Append("\r\n");
            }


            // 3) wiersze
            foreach (var rowIndex in _SelectedRows)
            {
                for (int i = 0; i < selectedCols.Count; i++)
                {
                    if (i > 0) sb.Append('\t');

                    var col = selectedCols[i];

                    // TODO: dostosuj do Twojego modelu:
                    // - GetCellText(row, col) powinno zwrócić string dla komórki
                    var cellText = GetExportValue(rowIndex, col);

                    sb.Append(NormalizeCell(cellText));
                }

                sb.Append("\r\n");
            }

            // 4) do schowka
            var package = new DataPackage();
            package.SetText(sb.ToString());
            package.RequestedOperation = DataPackageOperation.Copy;

            Clipboard.SetContent(package);
            //Clipboard.Flush();
        }

        private static string NormalizeCell(string? s)
        {
            if (string.IsNullOrEmpty(s)) return "";

            // TSV: tab i nowe linie psują format -> zamieniamy na spacje
            return s.Replace("\t", " ")
                    .Replace("\r", " ")
                    .Replace("\n", " ");
        }

    }
}