using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace ExcelToCsvToDb.Commons
{
    /// <summary>
    /// 共通
    /// </summary>
    public static class Common
    {
        #region 定数

        #region 起動時引数

        //OLD
        ///// <summary>
        ///// 起動時引数：処理区分：溶接加工計画
        ///// </summary>
        //public const string KIDOU_PARA_PROC_WE_ORDER = "/WEORDER";
        ///// <summary>
        ///// 起動時引数：機能区分：Excel To CSV
        ///// </summary>
        //public const string KIDOU_PARA_FUNC_EXCEL_TO_CSV = "/EXCELTOCSV";
        ///// <summary>
        ///// 起動時引数：機能区分：CSV To DB
        ///// </summary>
        //public const string KIDOU_PARA_FUNC_CSV_TO_DB = "/CSVTODB";
        //OLD

        #endregion

        #region メインPJ固有ステップ

        /// <summary>
        /// メイン固有ステップ：Excel→CSV（WE生産計画）
        /// </summary>
        public const string MAINPJ_KOYU_STEP_NAME_EXCEL_TO_CSV_WEORDER = "EXCELTOCSV_WEORDER";

        /// <summary>
        /// メイン固有ステップ：Excel→CSV（簡易）
        /// </summary>
        public const string MAINPJ_KOYU_STEP_NAME_EXCEL_TO_CSV_EAZY = "EXCELTOCSV_EAZY";

        #endregion

        #region 戻り値（プロセス終了値）

        /// <summary>
        /// 戻り値（プロセス終了値）
        /// </summary>
        public enum RetCode
        {
            /// <summary>
            /// 正常終了
            /// </summary>
            Success = 0,

            /// <summary>
            /// メイン：起動時引数不足エラー
            /// </summary>
            ExecuteParameterCountError = 1,

            /// <summary>
            /// メイン：INIステップ情報の形式が不正
            /// </summary>
            IniStepInfoFormatError = 2,

            /// <summary>
            /// メイン：ステップ機能エラー
            /// </summary>
            StepFunctionError = 3,

            /// <summary>
            /// メイン：ステップリストエラー
            /// </summary>
            StepListError = 4,

            /// <summary>
            /// メイン：INIファイルパスエラー
            /// </summary>
            IniFiilePathError = 5,

            /// <summary>
            /// ExcelToCsvWe：開始日エラー
            /// </summary>
            StartDateError = 1001,

            /// <summary>
            /// ExcelToCsvWe：入力フォルダパスエラー
            /// </summary>
            InFolderPathError = 1002,

            /// <summary>
            /// ExcelToCsvWe：対象ファイル群取得エラー
            /// </summary>
            TargetFilesGetError = 1003,

            /// <summary>
            /// ExcelToCsvWe：CSV出力時エラー
            /// </summary>
            ExportToCsvError = 1004,

            /// <summary>
            /// ExcelToCsvWe：CSVファイル名が未設定
            /// </summary>
            CsvFileNameNotSetting = 1005,

            /// <summary>
            /// ExcelToCsvWe：Excelシートチェック項目不正
            /// </summary>
            ExcelSheelCheckItemInvalid = 1006,

            /// <summary>
            /// ExcelToCsvWe：Excel→CSV処理時に例外発生
            /// </summary>
            ExcelToCsvException = 1007,

            /// <summary>
            /// ExcelToCsvWe：Excel日付セル取得エラー
            /// </summary>
            ExcelDateCellGetError = 1008,

            /// <summary>
            /// ExcelToCsvWe：Excelデータ取得エラー
            /// </summary>
            ExcelDataGetError = 1009,

            /// <summary>
            /// ExcelToCsvWe：Excelファイル処理時に例外発生
            /// </summary>
            ExcelOneFileException = 1010,

            /// <summary>
            /// ExcelToCsvWe：Excelライン（複数）情報取得エラー
            /// </summary>
            ExcelLinesInfoGetError = 1011,

            /// <summary>
            /// ExcelToCsvWe：アイテムとExcel列マッピングエラー
            /// </summary>
            CreateItemExcelColumnMappingDicError = 1012,

            /// <summary>
            /// ExcelToCsvWe：設定ファイル設定値エラー
            /// </summary>
            ConfigError = 1013,

            /// <summary>
            /// ExcelToCsvWe：終了日エラー
            /// </summary>
            EndDateError = 1014,

            /// <summary>
            /// Excel設定エラー
            /// </summary>
            ExcelSettingsError = 1015,

            /// <summary>
            /// 簡易特殊処理エラー
            /// </summary>
            KaniTokushuError = 1016,
        }

        #endregion

        #region ファイル・フォルダ

        /// <summary>
        /// SQLフォルダパス
        /// </summary>
        public const string SQL_FOLDER_PATH = "SQL";

        #endregion

        #region INIファイル

        #region ファイルパス

        /// <summary>
        /// INIファイル名
        /// </summary>
        public const string INI_FILE_NAME = "setting.ini";

        /// <summary>
        /// INIファイルパス（実行後に動的に設定される）
        /// </summary>
        public static string INI_FILE_PATH = string.Empty;

        #endregion

        #region セクション名

        ///// <summary>
        ///// セクション名：CSV to DB
        ///// </summary>
        //public const string INI_SECTION_CSVTODB = "CsvToDb";

        ///// <summary>
        ///// セクション名：SFTP
        ///// </summary>
        //public const string INI_SECTION_SFTP = "SFTP";

        ///// <summary>
        ///// セクション名：バックアップ
        ///// </summary>
        //public const string INI_SECTION_BACKUP = "Backup";

        #endregion

        #region 共通セクションのキー

        ///// <summary>
        ///// キー名：タイトル
        ///// </summary>
        //public const string INI_KEY_TITLE = "Title";

        ///// <summary>
        ///// CSVエンコーディング名
        ///// </summary>
        //public const string INI_KEY_CSV_ENCODING = "CsvEncoding";

        #endregion

        #region ExcelToCsvセクションのキー

        ///// <summary>
        ///// キー名：入力フォルダー
        ///// </summary>
        //public const string INI_KEY_IN_FOLDER = "InFolder";

        ///// <summary>
        ///// キー名：入力ファイル名（ワイルドカード指定あり）
        ///// </summary>
        //public const string INI_KEY_IN_FILE_NAME = "InFileName";

        ///// <summary>
        ///// キー名：Excelシートチェック項目
        ///// 行,列,値|行,列,値|...
        ///// 行と列は1オリジン
        ///// </summary>
        //public const string INI_KEY_EXCEL_SHEET_CHECK_ITEMS = "ExcelSheetCheckItems";

        ///// <summary>
        ///// キー名：ライン判定列番号（1オリジン）
        ///// </summary>
        //public const string INI_KEY_EXCEL_LINE_JUDGE_COL = "ExcelLineJudgeCol";

        ///// <summary>
        ///// キー名：日付行番号（1オリジン）
        ///// </summary>
        //public const string INI_KEY_EXCEL_DATE_ROW = "ExcelDateRow";

        ///// <summary>
        ///// キー名：日付行開始列番号（1オリジン）
        ///// </summary>
        //public const string INI_KEY_EXCEL_DATE_ROW_START_COL = "ExcelDateRowStartCol";

        ///// <summary>
        ///// キー名：日付行終了値
        ///// </summary>
        //public const string INI_KEY_EXCEL_DATE_ROW_END_VALUE = "ExcelDateRowEndValue";

        ///// <summary>
        ///// キー名：データ終了判定列番号（1オリジン）
        ///// </summary>
        //public const string INI_KEY_EXCEL_DATA_END_JUDGE_COL = "ExcelDataEndJudgeCol";

        ///// <summary>
        ///// キー名：データ終了判定値
        ///// </summary>
        //public const string INI_KEY_EXCEL_DATA_END_JUDGE_VALUE = "ExcelDataEndJudgeValue";

        ///// <summary>
        ///// キー名：非表示行の扱い
        ///// skip/include/warn（ログ出し＋skip）
        ///// </summary>
        //public const string INI_KEY_EXCEL_HIDDEN_ROW_HANDLING = "ExcelHiddenRowHandling";

        ///// <summary>
        ///// キー名：MC生産負荷行判定列番号（1オリジン）
        ///// </summary>
        //public const string INI_KEY_EXCEL_MC_SEISAN_FUKA_JUDGE_COL = "ExcelMcSeisanFukaRowJudgeCol";

        ///// <summary>
        ///// キー名：MC生産負荷行判定値（パターン）
        ///// </summary>
        //public const string INI_KEY_EXCEL_MC_SEISAN_FUKA_JUDGE_VALUE_PATTERN = "ExcelMcSeisanFukaRowJudgeValuePattern";
        ///// <summary>
        ///// キー名：AF/WE列番号（1オリジン）
        ///// </summary>
        //public const string INI_KEY_EXCEL_AF_WE_COL = "ExcelAfWeCol";

        ///// <summary>
        ///// キー名：開始日オフセット（加算日数）
        ///// </summary>
        //public const string INI_KEY_DAYS_TO_START_OFFSET = "DaysToStartOffset";

        ///// <summary>
        ///// キー名：CSV保存一時フォルダパス
        ///// </summary>
        //public const string INI_KEY_CSV_TEMP_FOLDER = "CsvTempFolder";

        ///// <summary>
        ///// キー名：CSVファイル名（WE生産計画）
        ///// </summary>
        //public const string INI_KEY_CSV_FILE_NAME_WE_ORDER = "CsvFileNameWeOrder";

        ///// <summary>
        ///// キー名：ファイル名のプレフィックス（日時フォーマット）
        ///// </summary>
        //public const string INI_KEY_FILE_DT_PREFIX = "FileDtPrefix";

        ///// <summary>
        ///// キー名：ファイル名のサフィックス（日時フォーマット）
        ///// </summary>
        //public const string INI_KEY_FILE_DT_SUFFIX = "FileDtSuffix";

        ///// <summary>
        ///// キー名：名前→ID変換リスト（ライン用）
        ///// </summary>
        //public const string INI_KEY_NAME_TO_ID_LIST_FOR_LINE = "NameToIdListForLine";

        #endregion

        #region CsvToDbセクションのキー

        ///// <summary>
        ///// キー名：CSVファイル名パターン（カンマ区切り複数指定）
        ///// </summary>
        //public const string INI_KEY_CSV_FILE_NAME_PATTERNS = "CsvFileNamePatterns";

        ///// <summary>
        ///// キー名：INSERTのSQLファイル名（カンマ区切り複数指定）
        ///// </summary>
        //public const string INI_KEY_INSERT_SQL_FILES = "InsertSqlFiles";

        ///// <summary>
        ///// キー名：重複チェックSQLファイル名（カンマ区切り複数指定）
        ///// </summary>
        //public const string INI_KEY_DUP_CHECK_SQL_FILES = "DupCheckSqlFiles";

        ///// <summary>
        ///// キー名：挿入前削除SQLファイル名（カンマ区切り複数指定）
        ///// </summary>
        //public const string INI_KEY_DELETE_BEFORE_INSERT_SQL_FILES = "DeleteBeforeInsertSqlFiles";

        ///// <summary>
        ///// キー名：SFTPダウンロード後のアクション
        ///// （"DELETE"：ダウンロード元ファイルの削除）
        ///// </summary>
        //public const string INI_KEY_ACTION_AFTER_SFTP_DOWNLOAD = "ActionAfterSFTPDownload";

        ///// <summary>
        ///// キー名：SFTPアップロード後のアクション
        ///// （"CLEANUP"：アップロード元フォルダのクリーンナップ）
        ///// </summary>
        //public const string INI_KEY_ACTION_AFTER_SFTP_UPLOAD = "ActionAfterSFTPUpload";

        ///// <summary>
        ///// キー名：DBのプロバイダ名
        ///// </summary>
        //public const string INI_KEY_DB_PROVIDER_NAME = "DbProviderName";

        ///// <summary>
        ///// キー名：DBの接続文字列
        ///// </summary>
        //public const string INI_KEY_DB_CONNECTION_STRING = "DbConnectionString";

        ///// <summary>
        ///// キー名：DB登録後の処理
        ///// "DELETE":ローカルCSVの削除
        ///// "BACKUP":ローカルCSVのバックアップ
        ///// </summary>
        //public const string INI_KEY_ACTION_AFTER_DB_REGIST = "ActionAfterDbRegist";

        ///// <summary>
        ///// キー名：CSVバックアップフォルダパス
        ///// </summary>
        //public const string INI_KEY_CSV_BACKUP_FOLDER = "CsvBackupFolder";

        ///// <summary>
        ///// キー名：CSVバックアップ：最大日数
        ///// </summary>
        //public const string INI_KEY_CSV_BACKUP_MAX_DAYS = "CsvBackupMaxDays";

        ///// <summary>
        ///// キー名：CSVバックアップ：最大ファイル数
        ///// </summary>
        //public const string INI_KEY_CSV_BACKUP_MAX_FILE_COUNT = "CsvBackupMaxFileCount";

        #endregion

        #region SFTPセクションのキー

        /// <summary>
        /// キー名：ホスト名（またはIPアドレス）
        /// </summary>
        //public const string INI_KEY_SFTP_HOST = "Host";

        ///// <summary>
        ///// キー名：ポート番号
        ///// </summary>
        //public const string INI_KEY_SFTP_PORT = "Port";

        ///// <summary>
        ///// キー名：ユーザ名
        ///// </summary>
        //public const string INI_KEY_SFTP_USER_NAME = "UserName";

        ///// <summary>
        ///// キー名：プライベートキーファイルパス
        ///// </summary>
        //public const string INI_KEY_SFTP_PRIVATE_KEY_FILE_PATH = "PrivateKeyFilePath";

        ///// <summary>
        ///// キー名：パスフレーズ（暗号化済み）
        ///// </summary>
        //public const string INI_KEY_SFTP_PASS_PHRASE = "PassPhrase";

        /////// <summary>
        /////// キー名：リモートパス
        /////// </summary>
        ////public const string INI_KEY_SFTP_REMOTE_PATH = "RemotePath";

        #endregion

        #endregion

        #region オプションアクション

        ///// <summary>
        ///// オプションアクション：削除
        ///// </summary>
        //public const string OPTION_ACTION_DELETE = "DELETE";

        ///// <summary>
        ///// オプションアクション：バックアップ
        ///// </summary>
        //public const string OPTION_ACTION_BACKUP = "BACKUP";

        ///// <summary>
        ///// オプションアクション：クリーンナップ
        ///// </summary>
        //public const string OPTION_ACTION_CLEANUP = "CLEANUP";

        #endregion

        #region 非表示行の扱い

        /// <summary>
        /// 非表示行の扱い：スキップ（処理対象外）
        /// </summary>
        //public const string HIDDEN_ROW_HANDLING_SKIP = "skip";

        /// <summary>
        /// 非表示行の扱い：処理対象
        /// </summary>
        //public const string HIDDEN_ROW_HANDLING_INCLUDE = "include";

        /// <summary>
        /// 非表示行の扱い：ワーニング（警告ログしスキップ）
        /// </summary>
        //public const string HIDDEN_ROW_HANDLING_WARN = "warn";

        #endregion

        #endregion
    }
}
