#!/bin/bash

kopiaRestoreSnapshot()
{
    local idx="$1"
    local snapshot_id="$2"
    local target_dir="$3"
    local include_path="$4"  # ignored — kopia restores by snapshot id directly

    if [[ -z "$snapshot_id" || -z "$target_dir" ]]; then
        isError "kopiaRestoreSnapshot requires snapshot_id and target_dir"
        return 1
    fi

    kopiaEnvExport "$idx" || return 1
    runFileOp mkdir -p "$target_dir"

    isNotice "Restoring ${snapshot_id:0:12} from $(resticLocationName "$idx") → $target_dir"
    # Kopia's restore lays down the snapshot's source tree relative to target.
    # If include_path was given (we always pass /docker/containers/<app>), we
    # nest into that subpath under target so it matches restic's behaviour.
    local final_target="$target_dir"
    if [[ -n "$include_path" ]]; then
        final_target="$target_dir/${include_path#/}"
        runFileOp mkdir -p "$final_target"
    fi
    runBackupOp kopia snapshot restore "$snapshot_id" "$final_target"
    local rc=$?
    kopiaEnvUnset
    return $rc
}

kopiaDumpFile()
{
    local idx="$1"
    local snapshot_id="$2"
    local file_path="$3"
    local target_file="$4"

    kopiaEnvExport "$idx" || return 1
    # `kopia show` writes the file contents from a snapshot to stdout.
    if [[ -n "$target_file" ]]; then
        runBackupOp kopia show "${snapshot_id}:${file_path}" | runBackupOp tee "$target_file" >/dev/null
    else
        runBackupOp kopia show "${snapshot_id}:${file_path}"
    fi
    local rc=$?
    kopiaEnvUnset
    return $rc
}
