package nori

import (
	"bytes"
	"fmt"
	"io"
	"os"

	"github.com/spf13/afero"
	"github.com/suapapa/go_hangul/encoding/cp949"
)

func New() *Nori {
	return &Nori{}
}

func FromFile(fp string) (*Nori, error) {
	file, err := os.Open(fp)
	if err != nil {
		return nil, err
	}
	defer file.Close()
	fs := afero.NewMemMapFs()
	f, _ := fs.OpenFile("_", os.O_TRUNC|os.O_CREATE, 0o740)
	io.Copy(f, file)
	f.Seek(0, io.SeekStart)
	return Decode(f)
}

func Decode(r io.ReadSeeker) (*Nori, error) {
	nori := New()
	err := nori.Decode(r)
	return nori, err
}

func GetAnimationNames(n *Nori) (map[string]int, error) {
	names := make(map[string]int, n.AnimationCount)
	for i := range n.Animations {
		anim := n.Animations[i]
		title, codepageError := cp949.From(anim.Title[:])
		if codepageError != nil {
			return nil, fmt.Errorf("couldn't convert title of animation %d", i)
		}
		cleanTitle := string(bytes.SplitN(title[:], []byte{0}, 2)[0])
		names[cleanTitle] = i
	}
	return names, nil
}
