package services

import (
	"bytes"
	"encoding/json"
	"fmt"
	"net/http"
)

type MisskeyPost struct {
	ID   string `json:"id"`
	Text string `json:"text"`
	User struct {
		Username    string `json:"username"`
		DisplayName string `json:"name"`
		AvatarURL   string `json:"avatarUrl"`
	} `json:"user"`
	CreatedAt string `json:"createdAt"`
}

func FetchTimeline(server, token string, limit int) ([]MisskeyPost, error) {
	url := fmt.Sprintf("%s/api/notes/global-timeline", server)

	payload := map[string]interface{}{
		"limit": limit,
		"i":     token,
	}
	body, _ := json.Marshal(payload)

	req, err := http.NewRequest("POST", url, bytes.NewBuffer(body))
	if err != nil {
		return nil, err
	}
	req.Header.Set("Content-Type", "application/json")

	client := &http.Client{}
	resp, err := client.Do(req)
	if err != nil {
		return nil, fmt.Errorf("failed to fetch Misskey posts: %v", err)
	}
	defer resp.Body.Close()

	var posts []MisskeyPost
	if err := json.NewDecoder(resp.Body).Decode(&posts); err != nil {
		return nil, fmt.Errorf("failed to parse Misskey JSON: %v", err)
	}

	return posts, nil
}