/*
 * Copyright 2025 Google LLC
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef SkGaneshRecorder_DEFINED
#define SkGaneshRecorder_DEFINED

#include "include/core/SkCPURecorder.h"
#include "include/core/SkRecorder.h"
#include "include/core/SkSurface.h"
#include "include/gpu/ganesh/GrRecordingContext.h"

class GrDirectContext;

class SkGaneshRecorder final : public SkRecorder {
public:
    SkGaneshRecorder(GrRecordingContext* ctx) : fGaneshCtx(ctx) {}

    Type type() const override { return SkRecorder::Type::kGanesh; }

    GrRecordingContext* recordingContext() const { return fGaneshCtx; }

    GrDirectContext* directContext() const { return GrAsDirectContext(fGaneshCtx); }

    skcpu::Recorder* cpuRecorder() override {
        return skcpu::Recorder::TODO();
    }

private:
    GrRecordingContext* fGaneshCtx;

    SkCanvas* makeCaptureCanvas(SkCanvas*) override { return nullptr; }
    void createCaptureBreakpoint(SkSurface*) override {}
};

inline SkGaneshRecorder* AsGaneshRecorder(SkRecorder* recorder) {
    if (!recorder) {
        return nullptr;
    }
    if (recorder->type() != SkRecorder::Type::kGanesh) {
        return nullptr;
    }
    return static_cast<SkGaneshRecorder*>(recorder);
}

#endif
