package storage

import (
	"encoding/binary"
	"fmt"
	"os"
	"time"

	"github.com/golang/snappy"
)

func main() {
	now := time.Now()
	// Обратите внимание: Packets – срез, поэтому оборачиваем пакет в литерал среза.
	seg := Segment{
		Date:     now.Format(time.RFC3339),
		Duration: "1m",
		Packets: []InterleavedPacket{
			{
				Type: PacketTypeH264,
				Pts:  now.UnixNano(),
				H264AUs: [][]byte{
					[]byte{0x00, 0x01, 0x02},
					[]byte{0x03, 0x04},
				},
			},
		},
	}

	f, err := os.Create("stream_interleaved.bin")
	if err != nil {
		fmt.Println("Ошибка создания файла:", err)
		return
	}
	defer f.Close()

	writer := snappy.NewBufferedWriter(f)
	defer writer.Close()

	streamID := "example_stream"
	if err := binary.Write(writer, binary.LittleEndian, int32(len(streamID))); err != nil {
		fmt.Println("Ошибка записи заголовка:", err)
		return
	}
	if _, err := writer.Write([]byte(streamID)); err != nil {
		fmt.Println("Ошибка записи streamID:", err)
		return
	}

	// Здесь можно записывать сначала заголовочный сегмент, затем сегменты с пакетами.
	// Например, если заголовочный сегмент содержит только Start и Duration:
	if err := WriteHeader(writer, seg); err != nil {
		fmt.Println("Ошибка записи заголовочного сегмента:", err)
		return
	}
	// А затем записываем сегмент с пакетами:
	if err := WriteInterleavedPacket(writer, seg); err != nil {
		fmt.Println("Ошибка записи сегмента пакетов:", err)
		return
	}

	if err := writer.Flush(); err != nil {
		fmt.Println("Ошибка при сбросе данных:", err)
		return
	}

	fmt.Println("Сегмент с interleaved пакетами успешно записан.")
}
