package httpapi

import (
	"git.vakhrushev.me/av/jellybit/internal/layout"
	"git.vakhrushev.me/av/jellybit/internal/recognize"
)

// fileRow — строка виджета «файл источника → раскладка», общего для экранов
// ревью и просмотра загрузки. Целевой путь берётся из превью (единая логика
// internal/layout), а не вычисляется в шаблоне.
type fileRow struct {
	Src       string
	Dst       string // целевой путь; пусто — файл не раскладывается
	RoleLabel string
	Linked    bool
	Ignored   bool
}

// buildFileRows сшивает файлы плана с целевыми путями из превью раскладки.
func buildFileRows(plan recognize.Plan, preview []layout.Link) []fileRow {
	dstBySrc := make(map[string]string, len(preview))
	for _, l := range preview {
		dstBySrc[l.Src] = l.Dst
	}
	rows := make([]fileRow, 0, len(plan.Files))
	for _, f := range plan.Files {
		dst := dstBySrc[f.Src]
		rows = append(rows, fileRow{
			Src:       f.Src,
			Dst:       dst,
			RoleLabel: roleLabel(string(f.Role)),
			Linked:    dst != "",
			Ignored:   f.Role == "ignore",
		})
	}
	return rows
}

// roleLabel — человекочитаемая роль файла раскладки.
func roleLabel(role string) string {
	switch role {
	case "episode":
		return "эпизод"
	case "main", "movie":
		return "фильм"
	case "subtitle":
		return "субтитры"
	case "extra":
		return "допматериал"
	case "sample":
		return "семпл"
	case "ignore":
		return "игнор"
	default:
		return role
	}
}
