﻿/*******************************************************************************
 * You may amend and distribute as you like, but don't remove this header!
 *
 * EPPlus provides server-side generation of Excel 2007/2010 spreadsheets.
 * See http://www.codeplex.com/EPPlus for details.
 *
 * Copyright (C) 2011  Jan Källman
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.

 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU Lesser General Public License for more details.
 *
 * The GNU Lesser General Public License can be viewed at http://www.opensource.org/licenses/lgpl-license.php
 * If you unfamiliar with this license or have questions about it, here is an http://www.gnu.org/licenses/gpl-faq.html
 *
 * All code and executables are provided "as is" with no warranty either express or implied.
 * The author accepts no liability for any damage or loss of business that this product may cause.
 *
 * Code change notes:
 *
 * Author							Change						Date
 * ******************************************************************************
 * Jan Källman		    Initial Release		        2011-01-01
 * Jan Källman		    License changed GPL-->LGPL 2011-12-27
 *******************************************************************************/

using System.Globalization;
using System.Text;

namespace AppsheetEpplus;

/// <summary>
/// Discribes a column when reading a text using the ExcelRangeBase.LoadFromText method
/// </summary>
public enum eDataTypes {
  /// <summary>
  /// Let the the import decide.
  /// </summary>
  Unknown,

  /// <summary>
  /// Always a string.
  /// </summary>
  String,

  /// <summary>
  /// Try to convert it to a number. If it fails then add it as a string.
  /// </summary>
  Number,

  /// <summary>
  /// Try to convert it to a date. If it fails then add it as a string.
  /// </summary>
  DateTime,

  /// <summary>
  /// Try to convert it to a number and divide with 100.
  /// Removes any tailing percent sign (%). If it fails then add it as a string.
  /// </summary>
  Percent,
}

/// <summary>
/// Describes how to split a CSV text. Used by the ExcelRange.LoadFromText method
/// </summary>
public class ExcelTextFormat {
  /// <summary>
  /// Describes how to split a CSV text
  ///
  /// Default values
  /// <list>
  /// <listheader><term>Property</term><description>Value</description></listheader>
  /// <item><term>Delimiter</term><description>,</description></item>
  /// <item><term>TextQualifier</term><description>None (\0)</description></item>
  /// <item><term>EOL</term><description>CRLF</description></item>
  /// <item><term>Culture</term><description>CultureInfo.InvariantCulture</description></item>
  /// <item><term>DataTypes</term><description>End of line default CRLF</description></item>
  /// <item><term>SkipLinesBeginning</term><description>0</description></item>
  /// <item><term>SkipLinesEnd</term><description>0</description></item>
  /// <item><term>Encoding</term><description>Encoding.ASCII</description></item>
  /// </list>
  /// </summary>
  public ExcelTextFormat() {}

  /// <summary>
  /// Delimiter character
  /// </summary>
  public char Delimiter { get; set; } = ',';

  /// <summary>
  /// Text qualifier character
  /// </summary>
  public char TextQualifier { get; set; } = '\0';

  /// <summary>
  /// End of line characters. Default CRLF
  /// </summary>
  public string EOL { get; set; } = "\r\n";

  /// <summary>
  /// Datatypes list for each column (if column is not present Unknown is assumed)
  /// </summary>
  public eDataTypes[] DataTypes { get; set; } = null;

  /// <summary>
  /// Culture used when parsing. Default CultureInfo.InvariantCulture
  /// </summary>
  public CultureInfo Culture { get; set; } = CultureInfo.InvariantCulture;

  /// <summary>
  /// Number of lines skiped in the begining of the file. Default 0.
  /// </summary>
  public int SkipLinesBeginning { get; set; } = 0;

  /// <summary>
  /// Number of lines skiped at the end of the file. Default 0.
  /// </summary>
  public int SkipLinesEnd { get; set; } = 0;

  /// <summary>
  /// Only used when reading files from disk using a FileInfo object. Default AscII
  /// </summary>
  public Encoding Encoding { get; set; } = Encoding.ASCII;
}
