package holiday

import (
	"github.com/google/uuid"
	"github.com/jmoiron/sqlx"
)

type CountryService struct {
	DB *sqlx.DB
}

func (s *CountryService) FindById(id uuid.UUID) (Country, error) {
	var country Country
	return country, s.DB.Get(&country, `SELECT * FROM "country" WHERE "id" = $1;`, id)
}

func (s *CountryService) Find() ([]Country, error) {
	var countries []Country
	return countries, s.DB.Select(&countries, `SELECT * FROM "country";`)
}

func (s *CountryService) Update(country Country) (Country, error) {
	_, err := s.DB.Exec(`UPDATE country SET "iso_name" = $2, "name" = $3 WHERE "id" = $1`,
		&country.Id, &country.IsoName, &country.Name,
	)
	return country, err
}

func (s *CountryService) Create(country Country) (Country, error) {
	country.Id = uuid.Must(uuid.NewRandom())
	_, err := s.DB.Exec(`INSERT INTO country (id, iso_name, name) values ($1, $2, $3)`,
		&country.Id, &country.IsoName, &country.Name,
	)
	return country, err
}

func (s *CountryService) Delete(id uuid.UUID) error {
	_, err := s.DB.Exec(`DELETE FROM country WHERE "id" = $1`, &id)
	return err
}
