package main

import (
	"archive/zip"
	"bytes"
	"io"
	"os"
)

func fillODTForm(inputPath, outputPath string, fields map[string]string) error {
	reader, err := zip.OpenReader(inputPath)
	if err != nil {
		return err
	}
	defer reader.Close()

	writer, err := os.Create(outputPath)
	if err != nil {
		return err
	}
	defer writer.Close()

	zipWriter := zip.NewWriter(writer)
	defer zipWriter.Close()

	for _, file := range reader.File {
		if file.Name == "content.xml" {
			rc, err := file.Open()
			if err != nil {
				return err
			}
			defer rc.Close()
			content, err := io.ReadAll(rc)
			if err != nil {
				return err
			}
			for field, value := range fields {
				content = bytes.Replace(content, []byte("%"+field+"%"), []byte(value), -1)
			}
			w, err := zipWriter.Create(file.Name)
			if err != nil {
				return err
			}
			_, err = w.Write(content)
			if err != nil {
				return err
			}
		} else {
			w, err := zipWriter.Create(file.Name)
			if err != nil {
				return err
			}
			rc, err := file.Open()
			if err != nil {
				return err
			}
			_, err = io.Copy(w, rc)
			rc.Close()
			if err != nil {
				return err
			}
		}
	}
	return nil
}
