#ifndef OverbyteIcsHttpThr2H
#define OverbyteIcsHttpThr2H

#include <System.Classes.hpp>
#include <memory>

#include "OverbyteIcsTypes.hpp"

enum TThreadState { tsInvalid, tsReady, tsBusy };

extern const wchar_t *const ThreadStateLits[3];

class THTTPThread : public TThread
{
protected:
    void __fastcall Execute() override;

private:
    HANDLE FEvent;
    TThreadState FState;
    String FURL;
    String FProxy;
    int FThreadNumber;
    String FBodyContent;
    int FStatusCode;
    bool FSuccess;
    std::unique_ptr<TStringList> FLogList;
    CRITICAL_SECTION FCritSect;
    void Progress(const String &Msg);
    void __fastcall OnSslHttpRestProg(TObject *Sender, TLogOption LogOption, const String Msg);

public:
    __fastcall THTTPThread(int AThreadNumber);
    __fastcall ~THTTPThread();
    void Wakeup();
    TStringList *LockLogList();
    void UnlockLogList();
    __property TThreadState State = {read=FState, write=FState};
    __property String URL = {read=FURL, write=FURL};
    __property String Proxy = {read=FProxy, write=FProxy};
    __property int ThreadNumber = {read=FThreadNumber, write=FThreadNumber};
    __property bool Success = {read=FSuccess};
    __property String BodyContent = {read=FBodyContent};
    __property int StatusCode = {read=FStatusCode};
};

#endif
