#include "pch.h"
#include "MockPowerRenameRegExEvents.h"

IFACEMETHODIMP_(ULONG)
CMockPowerRenameRegExEvents::AddRef()
{
    return InterlockedIncrement(&m_refCount);
}

IFACEMETHODIMP_(ULONG)
CMockPowerRenameRegExEvents::Release()
{
    long refCount = InterlockedDecrement(&m_refCount);

    if (refCount == 0)
    {
        delete this;
    }
    return refCount;
}

IFACEMETHODIMP CMockPowerRenameRegExEvents::QueryInterface(_In_ REFIID riid, _Outptr_ void** ppv)
{
    static const QITAB qit[] = {
        QITABENT(CMockPowerRenameRegExEvents, IPowerRenameRegExEvents),
        { 0 }
    };
    return QISearch(this, qit, riid, ppv);
}

IFACEMETHODIMP CMockPowerRenameRegExEvents::OnSearchTermChanged(_In_ PCWSTR searchTerm)
{
    CoTaskMemFree(m_searchTerm);
    m_searchTerm = nullptr;
    if (searchTerm != nullptr)
    {
        SHStrDup(searchTerm, &m_searchTerm);
    }
    return S_OK;
}

IFACEMETHODIMP CMockPowerRenameRegExEvents::OnReplaceTermChanged(_In_ PCWSTR replaceTerm)
{
    CoTaskMemFree(m_replaceTerm);
    m_replaceTerm = nullptr;
    if (replaceTerm != nullptr)
    {
        SHStrDup(replaceTerm, &m_replaceTerm);
    }
    return S_OK;
}

IFACEMETHODIMP CMockPowerRenameRegExEvents::OnFlagsChanged(_In_ DWORD flags)
{
    m_flags = flags;
    return S_OK;
}

IFACEMETHODIMP CMockPowerRenameRegExEvents::OnFileTimeChanged(_In_ SYSTEMTIME fileTime)
{
    m_fileTime = fileTime;
    return S_OK;
}

IFACEMETHODIMP CMockPowerRenameRegExEvents::OnMetadataChanged()
{
    return S_OK;
}


HRESULT CMockPowerRenameRegExEvents::s_CreateInstance(_Outptr_ IPowerRenameRegExEvents** ppsrree)
{
    *ppsrree = nullptr;
    CMockPowerRenameRegExEvents* psrree = new CMockPowerRenameRegExEvents();
    HRESULT hr = E_OUTOFMEMORY;
    if (psrree)
    {
        hr = psrree->QueryInterface(IID_PPV_ARGS(ppsrree));
        psrree->Release();
    }
    return hr;
}

