package models

import (
	"encoding/json"
	"errors"
	"io/ioutil"
	"strconv"
	"time"

	"github.com/beego/beego/logs"
)

var (
	Peers []Peer
)

type Peer struct {
	PeerId         string    `json:"peer_id,omitempty"`
	Name           string    `json:"name,omitempty"`
	Score          int64     `json:"score,omitempty"`
	Keywords       []string  `json:"keywords,omitempty"`
	LastSeenOnline time.Time `json:"last_seen_online,omitempty"`
	ApiVersion     string    `json:"api_version,omitempty"`
	Url            string    `json:"url,omitempty"`
	PublicKey      string    `json:"public_key,omitempty"`
}

func init() {
	//p := Peer{uuid.New().String(), 0, []string{"car", "highway", "images", "video"}, time.Now(), "1", "asf", ""}
	// pa := []Peer{p}
	// byteArray, err := json.Marshal(pa)
	// if err != nil {
	// 	log.Fatal(err)
	// }
	// ioutil.WriteFile("./peers.json", byteArray, 0644)
	content, err := ioutil.ReadFile("./peers.json")
	if err != nil {
		logs.Error("Error when opening file: ", err)
	}
	err = json.Unmarshal(content, &Peers)
	if err != nil {
		logs.Error("Error during Unmarshal(): ", err)
	}

}

func AddOne(peer Peer) (PeerId string) {
	peer.PeerId = "astaxie" + strconv.FormatInt(time.Now().UnixNano(), 10)
	Peers = append(Peers, peer)
	return peer.PeerId
}

func GetOne(PeerId string) (peer *Peer, err error) {

	return nil, errors.New("PeerId Not Exist")
}

func GetAll() []Peer {
	return Peers
}

func Update(PeerId string, Score int64) (err error) {

	return errors.New("PeerId Not Exist")
}

func Delete(PeerId string) {

}
