package chunk

import (
	"io"
	"os"

	"github.com/giolekva/pcloud/pfs/api"
)

type ReadOnlyFileChunk struct {
	f      *os.File
	offset int
	size   int
}

func NewReadOnlyFileChunk(f *os.File, offset, size int) Chunk {
	return &ReadOnlyFileChunk{f, offset, size}
}

func (c *ReadOnlyFileChunk) Stats() (ChunkInfo, error) {
	return ChunkInfo{
		Status:    api.ChunkStatus_READY,
		Size:      c.size,
		Committed: c.size}, nil
}

func (c *ReadOnlyFileChunk) ReaderAt() io.ReaderAt {
	return &fileReader{c.f}
}

func (c *ReadOnlyFileChunk) WriterAt() io.WriterAt {
	return &fileWriter{c.f}
}

type fileReader struct {
	f *os.File
}

func (f *fileReader) ReadAt(b []byte, offset int64) (int, error) {
	return f.f.ReadAt(b, offset)
}

type fileWriter struct {
	f *os.File
}

func (f *fileWriter) WriteAt(b []byte, offset int64) (int, error) {
	return f.f.WriteAt(b, offset)
}
