// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.

package shared

import (
	"encoding/json"
	"fmt"
	"github.com/airbytehq/terraform-provider-airbyte/internal/sdk/internal/utils"
	"time"
)

type Clockodo string

const (
	ClockodoClockodo Clockodo = "clockodo"
)

func (e Clockodo) ToPointer() *Clockodo {
	return &e
}
func (e *Clockodo) UnmarshalJSON(data []byte) error {
	var v string
	if err := json.Unmarshal(data, &v); err != nil {
		return err
	}
	switch v {
	case "clockodo":
		*e = Clockodo(v)
		return nil
	default:
		return fmt.Errorf("invalid value for Clockodo: %v", v)
	}
}

type SourceClockodo struct {
	// API key to use. Find it in the 'Personal data' section of your Clockodo account.
	APIKey string `json:"api_key"`
	// Your Clockodo account email address. Find it in your Clockodo account settings.
	EmailAddress string `json:"email_address"`
	// Identification of the calling application, including the email address of a technical contact person. Format: [name of application or company];[email address].
	ExternalApplication *string   `default:"Airbyte" json:"external_application"`
	StartDate           time.Time `json:"start_date"`
	// 2024, 2025
	Years      []any    `json:"years"`
	sourceType Clockodo `const:"clockodo" json:"sourceType"`
}

func (s SourceClockodo) MarshalJSON() ([]byte, error) {
	return utils.MarshalJSON(s, "", false)
}

func (s *SourceClockodo) UnmarshalJSON(data []byte) error {
	if err := utils.UnmarshalJSON(data, &s, "", false, false); err != nil {
		return err
	}
	return nil
}

func (o *SourceClockodo) GetAPIKey() string {
	if o == nil {
		return ""
	}
	return o.APIKey
}

func (o *SourceClockodo) GetEmailAddress() string {
	if o == nil {
		return ""
	}
	return o.EmailAddress
}

func (o *SourceClockodo) GetExternalApplication() *string {
	if o == nil {
		return nil
	}
	return o.ExternalApplication
}

func (o *SourceClockodo) GetStartDate() time.Time {
	if o == nil {
		return time.Time{}
	}
	return o.StartDate
}

func (o *SourceClockodo) GetYears() []any {
	if o == nil {
		return []any{}
	}
	return o.Years
}

func (o *SourceClockodo) GetSourceType() Clockodo {
	return ClockodoClockodo
}
