package model

import (
	"context"

	"git.kmsign.ru/royalcat/tstor/src/host/vfs"
)

type FsElem interface {
	Name() string
	IsDir() bool
}

func FillFsEntry(ctx context.Context, e FsElem, fs vfs.Filesystem, path string) (FsEntry, error) {
	switch e.(type) {
	case *vfs.ArchiveFS:
		e := e.(*vfs.ArchiveFS)
		return ArchiveFs{
			Name: e.Name(),
			Size: e.Size(),
			FS:   e,
		}, nil
	case *vfs.ResolverFS:
		e := e.(*vfs.ResolverFS)
		return ResolverFs{
			Name: e.Name(),
			FS:   e,
		}, nil
	case *vfs.TorrentFS:
		e := e.(*vfs.TorrentFS)
		torrent, err := MapTorrent(ctx, e.Torrent)
		if err != nil {
			return nil, err
		}
		return TorrentFs{
			Name:    e.Name(),
			Torrent: torrent,
			FS:      e,
		}, nil
	default:
		if e.IsDir() {
			return SimpleDir{
				Name: e.Name(),
				FS:   fs,
				Path: path,
			}, nil
		} else {
			return SimpleFile{
				Name: e.Name(),
			}, nil
		}
	}
}