// service.go defines application read ports and use-case orchestration.
// Layer: internal/app core business-facing API.
package app

import (
	"context"

	"gitea.maximumdirect.net/ejr/weatherfeeder/model"
)

// Repository defines outbound data access used by weatherapi use cases.
type Repository interface {
	LatestObservation(ctx context.Context) (*model.WeatherObservation, error)
	LatestHourlyForecast(ctx context.Context) (*model.WeatherForecastRun, error)
	LatestAlertRun(ctx context.Context) (*model.WeatherAlertRun, error)
	CurrentConditions(ctx context.Context, observationWindowMinutes int) (*CurrentConditions, error)
}

// Service provides weather read use-cases.
type Service struct {
	repo Repository
}

func NewService(repo Repository) *Service {
	return &Service{repo: repo}
}

func (s *Service) LatestObservation(ctx context.Context) (*model.WeatherObservation, error) {
	return s.repo.LatestObservation(ctx)
}

func (s *Service) LatestHourlyForecast(ctx context.Context) (*model.WeatherForecastRun, error) {
	return s.repo.LatestHourlyForecast(ctx)
}

func (s *Service) LatestAlertRun(ctx context.Context) (*model.WeatherAlertRun, error) {
	return s.repo.LatestAlertRun(ctx)
}

func (s *Service) CurrentConditions(ctx context.Context) (*CurrentConditions, error) {
	return s.repo.CurrentConditions(ctx, ObservationWindowMinutesDefault)
}
