#pragma once

#include <string>

#include "zeek/File.h"
#include "zeek/Val.h"

#include "file_analysis/analyzer/pe/pe_pac.h"

namespace zeek::file_analysis::detail {

/**
 * Analyze Portable Executable files
 */
class PE : public file_analysis::Analyzer {
public:
    ~PE();

    static file_analysis::Analyzer* Instantiate(RecordValPtr args, file_analysis::File* file) {
        return new PE(std::move(args), file);
    }

    virtual bool DeliverStream(const u_char* data, uint64_t len);

    virtual bool EndOfFile();

protected:
    PE(RecordValPtr args, file_analysis::File* file);
    binpac::PE::File* interp;
    binpac::PE::MockConnection* conn;
    bool done;
};

} // namespace zeek::file_analysis::detail
