#include "HeaderControl.h"
#include "InterfaceDefine.hpp"
#include "LogControl.h"
#include <ClientCore.h>

HeaderControl::HeaderControl(wxWindow* parent, std::shared_ptr<ClientCore>& clientCore) : wxPanel(parent), clientCore_(clientCore)
{
    Init();
}

HeaderControl::~HeaderControl()
{
}

void HeaderControl::SetLogControl(LogControl* logControl)
{
    logControl_ = logControl;
}

void HeaderControl::Init()
{
    auto* topSizer = new wxBoxSizer(wxHORIZONTAL);

    textIP_ = new wxTextCtrl(this, wxID_ANY);
    textPort_ = new wxTextCtrl(this, wxID_ANY);
    btnConnect_ = new wxButton(this, wxID_ANY, _("Connect"));
    btnDisconnect_ = new wxButton(this, wxID_ANY, _("Disconnect"));

    topSizer->Add(textIP_, 0, wxALL, gBorder);
    topSizer->Add(textPort_, 0, wxALL, gBorder);
    topSizer->Add(btnConnect_, 0, wxALL, gBorder);
    topSizer->Add(btnDisconnect_, 0, wxALL, gBorder);

    SetSizer(topSizer);
    Layout();

    Bind(wxEVT_BUTTON, &HeaderControl::OnConnect, this, btnConnect_->GetId());

    textIP_->SetValue(wxT("127.0.0.1"));
    textPort_->SetValue(wxT("8080"));
}

void HeaderControl::OnConnect(wxCommandEvent& event)
{
    wxString ip = textIP_->GetValue();
    unsigned int port{};
    if (!textPort_->GetValue().ToUInt(&port)) {
        logControl_->AddLog(_("Invalid port."));
        return;
    }
    auto uPort = static_cast<unsigned short>(port);
    if (!clientCore_->Connect(ip, uPort)) {
        logControl_->AddLog(wxString::Format(_("Connect to %s:%d failed."), ip, uPort));
        return;
    }
    logControl_->AddLog(wxString::Format(_("Connect to %s:%d Success."), ip, uPort));
}

void HeaderControl::OnDisconnect(wxCommandEvent& event)
{
}