using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using ChatworkBulkSender.UserControls;
using ChatworkBulkSender.Daos;
using ChatworkBulkSender.Dtos;
using ChatworkBulkSender.Utils;
namespace ChatworkBulkSender.Forms
{
public partial class T_MessageSender : Form
{
private Constants.SEND_TYPE _sendType;
private MessageInputControl _ucMessageInput = null;
private MessageConfirmControl _ucMessageConfirm = null;
private MessageSendResultControl _ucMessageSendResult = null;
public T_MessageSender(Constants.SEND_TYPE sendType)
{
InitializeComponent();
_sendType = sendType;
Init();
}
private void Init()
{
// ユーザーコントロール生成
_ucMessageInput = new MessageInputControl(_sendType) { Dock = DockStyle.Fill };
_ucMessageConfirm = new MessageConfirmControl { Dock = DockStyle.Fill };
_ucMessageSendResult = new MessageSendResultControl { Dock = DockStyle.Fill };
// ユーザーコントロールへのイベント登録
_ucMessageInput.SwitchToMessageConfirm += SwitchToMessageConfirmRequested;
_ucMessageInput.CloseForm += CloseFormRequested;
_ucMessageConfirm.SwitchToMessageInput += SwitchToMessageInputRequested;
_ucMessageConfirm.SwitchToMessageResult += SwitchToMessageResultRequested;
_ucMessageSendResult.CloseForm += CloseFormRequested;
_ucMessageSendResult.SwitchToMessageInputOnlyFailed += SwitchToMessageInputOnlyFailedRequested;
// パネルにセット
panel1.Controls.AddRange(new Control[]{
_ucMessageInput,
_ucMessageConfirm,
_ucMessageSendResult
});
// 入力画面を初期表示
SwitchToMessageInputRequested(this, EventArgs.Empty);
}
/// <summary>
/// 送信入力画面を表示
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SwitchToMessageInputRequested(object sender, EventArgs e)
{
// フォームタイトル
SetFormTitle("作成");
// 表示
_ucMessageInput.BringToFront();
}
/// <summary>
/// 送信確認画面を表示
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SwitchToMessageConfirmRequested(object sender, EventArgs e)
{
// データ受け渡し
BulkSendJobDto dto = _ucMessageInput.GetBulkSendJobDto();
_ucMessageConfirm.SetBulkSendJobDto(dto);
// フォームタイトル
SetFormTitle("確認");
// 表示
_ucMessageConfirm.BringToFront();
}
/// <summary>
/// 送信結果画面を表示
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SwitchToMessageResultRequested(object sender, EventArgs e)
{
// データ受け渡し
BulkSendJobDto dto = _ucMessageConfirm.GetBulkSendJobDto();
_ucMessageSendResult.RenderResults(dto.SendHistoryId);
_ucMessageSendResult.ChangeMode(_sendType);
// フォームタイトル
SetFormTitle("結果確認");
// 表示
_ucMessageSendResult.BringToFront();
}
private void CloseFormRequested(object sender, EventArgs e)
{
this.Close();
}
/// <summary>
/// 送信入力画面を開く(失敗データ再送モード)
/// </summary>
/// <param name="reSendHistoryId">再送したい履歴ID</param>
public void SwitchToMessageInputOnlyFailedRequested(int reSendHistoryId)
{
// _sendTypeを最新の情報に更新
var sendHistoryDto = new SendHistoryDao().GetSendHistory(reSendHistoryId);
_sendType = (Constants.SEND_TYPE)sendHistoryDto.SendType;
// フォームタイトル
SetFormTitle("作成");
// データロード(指定ID内の送信失敗データのみが画面に自動セットされる)
_ucMessageInput.LoadFailedHistory(reSendHistoryId);
// 表示
_ucMessageInput.BringToFront();
}
private void T_MessageSender_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult result;
if (_sendType == Constants.SEND_TYPE.REGULAR_SENDING)
{
result = MessageBox.Show("定期送信画面を終了してもよろしいですか?", "確認", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
}
else
{
result = MessageBox.Show("不定期送信画面を終了してもよろしいですか?", "確認", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
}
if (result == DialogResult.No)
{
e.Cancel = true;
return;
}
}
/// <summary>
/// フォームタイトルをセットする
/// </summary>
/// <param name="phase">"作成"/"確認"/"結果確認"</param>
private void SetFormTitle(string phase)
{
var baseText = _sendType == Constants.SEND_TYPE.REGULAR_SENDING
? "定期送信"
: "不定期送信";
this.Text = $"【Chatworkメッセージ送信ツール】{baseText} {phase}";
}
}
}