// Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package main

import (
	"encoding/json"
	"fmt"
	"log"
	"net/http"
	"os"
	"path"
	"strings"
	"time"

	"github.com/microcosm-cc/bluemonday"
	"gopkg.in/yaml.v2"
)

const (
	// eventLimit is the maximum number of events that will be output.
	eventLimit = 15
	// groupsSummaryPath is an API endpoint that returns global Go groups.
	// Fetching from this API path allows to sort groups by next upcoming event.
	groupsSummaryPath = "/pro/go/es_groups_summary?location=global&order=next_event&desc=false"
	// eventsHeader is a header comment for the output content.
	eventsHeader = `# DO NOT EDIT: Autogenerated from cmd/events.
# To update, run:
#    go run github.com/godevsite/go.dev/cmd/events > data/events.yaml`
)

func main() {
	c := &meetupAPI{
		baseURL: "https://api.meetup.com",
	}
	ue, err := getUpcomingEvents(c)
	if err != nil {
		log.Fatal(err)
	}
	printYAML(ue)
}

type client interface {
	getGroupsSummary() (*GroupsSummary, error)
	getGroup(urlName string) (*Group, error)
}

// getUpcomingEvents returns upcoming events globally.
func getUpcomingEvents(c client) (*UpcomingEvents, error) {
	summary, err := c.getGroupsSummary()
	if err != nil {
		return nil, err
	}
	p := bluemonday.NewPolicy()
	p.AllowStandardURLs()
	p.AllowAttrs("href").OnElements("a")
	p.AllowElements("br")
	// Work around messy newlines in content.
	r := strings.NewReplacer("\n", "<br/>\n", "&lt;br&gt;", "<br/>\n")
	var events []EventData
	for _, chapter := range summary.Chapters {
		if len(events) >= eventLimit {
			break
		}
		group, err := c.getGroup(chapter.URLName)
		if err != nil || group.NextEvent == nil {
			continue
		}
		tz, err := time.LoadLocation(group.Timezone)
		if err != nil {
			tz = time.UTC
		}
		// group.NextEvent.Time is in milliseconds since UTC epoch.
		nextEventTime := time.Unix(group.NextEvent.Time/1000, 0).In(tz)
		events = append(events, EventData{
			City:              chapter.City,
			Country:           chapter.Country,
			Description:       r.Replace(p.Sanitize(chapter.Description)), // Event descriptions are often blank, use Group description.
			ID:                group.NextEvent.ID,
			LocalDate:         nextEventTime.Format("Jan 2, 2006"),
			LocalTime:         nextEventTime.Format(time.RFC3339),
			LocalizedCountry:  group.LocalizedCountryName,
			LocalizedLocation: group.LocalizedLocation,
			Name:              group.NextEvent.Name,
			PhotoURL:          chapter.GroupPhoto.PhotoLink,
			State:             chapter.State,
			ThumbnailURL:      chapter.GroupPhoto.ThumbLink,
			URL:               "https://www.meetup.com/" + path.Join(chapter.URLName, "events", group.NextEvent.ID),
		})
	}
	return &UpcomingEvents{All: events}, nil
}

type meetupAPI struct {
	baseURL string
}

func (c *meetupAPI) getGroupsSummary() (*GroupsSummary, error) {
	resp, err := http.Get(c.baseURL + groupsSummaryPath)
	if err != nil {
		return nil, fmt.Errorf("failed to get events from %q: %v", groupsSummaryPath, err)
	}
	defer resp.Body.Close()
	if resp.StatusCode != http.StatusOK {
		return nil, fmt.Errorf("failed to get events from %q: %v", groupsSummaryPath, resp.Status)
	}
	var summary *GroupsSummary
	d := json.NewDecoder(resp.Body)
	if err := d.Decode(&summary); err != nil {
		return summary, fmt.Errorf("failed to decode events from %q: %w", groupsSummaryPath, err)
	}
	return summary, nil
}

// getGroup fetches group details, which are useful for getting details of the next upcoming event, and timezones.
func (c *meetupAPI) getGroup(urlName string) (*Group, error) {
	u := c.baseURL + "/" + urlName
	resp, err := http.Get(u)
	if err != nil {
		return nil, fmt.Errorf("failed to fetch group details from %q: %w", u, err)
	}
	defer resp.Body.Close()
	if resp.StatusCode != http.StatusOK {
		return nil, fmt.Errorf("failed to fetch group details from %q: %v", u, resp.Status)
	}

	var group Group
	d := json.NewDecoder(resp.Body)
	if err := d.Decode(&group); err != nil {
		return nil, fmt.Errorf("failed to decode group from %q: %w", u, err)
	}
	return &group, nil
}

func printYAML(v interface{}) {
	fmt.Println(eventsHeader)
	e := yaml.NewEncoder(os.Stdout)
	defer e.Close()
	if err := e.Encode(v); err != nil {
		log.Fatalf("failed to encode event yaml: %v", err)
	}
}

// UpcomingEvents is a list of EventData written out to YAML for rendering in Hugo.
type UpcomingEvents struct {
	All []EventData
}

// EventData is the structure written out to YAML for rendering in Hugo.
type EventData struct {
	City              string
	Country           string
	Description       string
	ID                string
	LocalDate         string `yaml:"local_date"`
	LocalTime         string `yaml:"local_time"`
	LocalizedCountry  string
	LocalizedLocation string
	Name              string
	PhotoURL          string
	State             string
	ThumbnailURL      string
	URL               string
}

// GroupsSummary is the structure returned from /pro/go/es_groups_summary.
type GroupsSummary struct {
	Chapters []*Chapter
}

type Event struct {
	Created       int    `json:"created"`
	Description   string `json:"description"`
	Duration      int    `json:"duration"`
	Fee           *Fee   `json:"fee"`
	Group         *Group `json:"group"`
	LocalDate     string `json:"local_date"`
	LocalTime     string `json:"local_time"`
	ID            string `json:"id"`
	Link          string `json:"link"`
	Name          string `json:"name"`
	RSVPLimit     int    `json:"rsvp_limit"`
	Status        string `json:"status"`
	Time          int64  `json:"time"`
	UTCOffset     int    `json:"utc_offset"`
	Updated       int    `json:"updated"`
	Venue         *Venue `json:"venue"`
	WaitlistCount int    `json:"waitlist_count"`
	YesRSVPCount  int    `json:"yes_rsvp_count"`
}

type Venue struct {
	Address1             string  `json:"address_1"`
	Address2             string  `json:"address_2"`
	Address3             string  `json:"address_3"`
	City                 string  `json:"city"`
	Country              string  `json:"country"`
	ID                   int     `json:"id"`
	Lat                  float64 `json:"lat"`
	LocalizedCountryName string  `json:"localized_country_name"`
	Lon                  float64 `json:"lon"`
	Name                 string  `json:"name"`
	Repinned             bool    `json:"repinned"`
	State                string  `json:"state"`
	Zip                  string  `json:"zip"`
}

type Group struct {
	Country              string  `json:"country"`
	Created              int     `json:"created"`
	Description          string  `json:"description"`
	ID                   int     `json:"id"`
	JoinMode             string  `json:"join_mode"`
	Lat                  float64 `json:"lat"`
	LocalizedLocation    string  `json:"localized_location"`
	LocalizedCountryName string  `json:"localized_country_name"`
	Lon                  float64 `json:"lon"`
	Name                 string  `json:"name"`
	NextEvent            *Event  `json:"next_event"`
	Region               string  `json:"region"`
	Timezone             string  `json:"timezone"`
	URLName              string  `json:"urlname"`
	Who                  string  `json:"who"`
}

type Fee struct {
	Accepts     string  `json:"accepts"`
	Amount      float64 `json:"amount"`
	Currency    string  `json:"currency"`
	Description string  `json:"description"`
	Label       string  `json:"label"`
	Required    bool    `json:"required"`
}

type Chapter struct {
	AverageAge     float64        `json:"average_age"`
	Category       []Category     `json:"category"`
	City           string         `json:"city"`
	Country        string         `json:"country"`
	Description    string         `json:"description"`
	FoundedDate    int64          `json:"founded_date"`
	GenderFemale   float64        `json:"gender_female"`
	GenderMale     float64        `json:"gender_male"`
	GenderOther    float64        `json:"gender_other"`
	GenderUnknown  float64        `json:"gender_unknown"`
	GroupPhoto     GroupPhoto     `json:"group_photo"`
	ID             int            `json:"id"`
	LastEvent      int64          `json:"last_event"`
	Lat            float64        `json:"lat"`
	Lon            float64        `json:"lon"`
	MemberCount    int            `json:"member_count"`
	Name           string         `json:"name"`
	NextEvent      int64          `json:"next_event"`
	OrganizerPhoto OrganizerPhoto `json:"organizer_photo"`
	Organizers     []Organizer    `json:"organizers"`
	PastEvents     int            `json:"past_events"`
	PastRSVPs      int            `json:"past_rsvps"`
	ProJoinDate    int64          `json:"pro_join_date"`
	RSVPsPerEvent  float64        `json:"rsvps_per_event"`
	RepeatRSVPers  int            `json:"repeat_rsvpers"`
	State          string         `json:"state"`
	Status         string         `json:"status"`
	Topics         []Topic        `json:"topics"`
	URLName        string         `json:"urlname"`
	UpcomingEvents int            `json:"upcoming_events"`
}

type Topic struct {
	ID     int    `json:"id"`
	Name   string `json:"name"`
	URLkey string `json:"urlkey"`
	Lang   string `json:"lang"`
}

type Category struct {
	ID        int    `json:"id"`
	Name      string `json:"name"`
	Shortname string `json:"shortname"`
	SortName  string `json:"sort_name"`
}

type Organizer struct {
	Name       string `json:"name"`
	MemberID   int    `json:"member_id"`
	Permission string `json:"permission"`
}

type OrganizerPhoto struct {
	BaseURL     string `json:"base_url"`
	HighresLink string `json:"highres_link"`
	ID          int    `json:"id"`
	PhotoLink   string `json:"photo_link"`
	ThumbLink   string `json:"thumb_link"`
	Type        string `json:"type"`
}

type GroupPhoto struct {
	BaseURL     string `json:"base_url"`
	HighresLink string `json:"highres_link"`
	ID          int    `json:"id"`
	PhotoLink   string `json:"photo_link"`
	ThumbLink   string `json:"thumb_link"`
	Type        string `json:"type"`
}
