//Calendar implementation for the HTWK Leipzig timetable. Evaluation and display of the individual dates in iCal format.
//Copyright (C) 2024 HTWKalender support@htwkalender.de

//This program is free software: you can redistribute it and/or modify
//it under the terms of the GNU Affero General Public License as published by
//the Free Software Foundation, either version 3 of the License, or
//(at your option) any later version.

//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//GNU Affero General Public License for more details.

//You should have received a copy of the GNU Affero General Public License
//along with this program.  If not, see <https://www.gnu.org/licenses/>.

package ical

import (
	"github.com/jordic/goics"
	"sort"
	"strings"
)

type HtwkalenderComponent struct {
	*goics.Component
}

func NewHtwkalenderComponent() *HtwkalenderComponent {
	return &HtwkalenderComponent{
		Component: goics.NewComponent(),
	}
}

// Writes the component to the Writer
func (c *HtwkalenderComponent) Write(w *goics.ICalEncode) {
	w.WriteLine("BEGIN:" + c.Tipo + goics.CRLF)

	// Iterate over component properties
	var keys []string
	for k := range c.Properties {
		keys = append(keys, k)
	}
	sort.Strings(keys)
	for _, key := range keys {
		vals := c.Properties[key]
		for _, val := range vals {
			w.WriteLine(WriteStringField(key, val))
		}
	}

	for _, xc := range c.Elements {
		xc.Write(w)
	}

	w.WriteLine("END:" + c.Tipo + goics.CRLF)
}

// WriteStringField UID:asdfasdfаs@dfasdf.com
func WriteStringField(key string, val string) string {
	return strings.ToUpper(key) + ":" + (val) + goics.CRLF
}
