﻿/*******************************************************************************
 * 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 OfficeOpenXml;

/// <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;
}
