package admin

import (
	"fmt"
	"math/rand"
	"os"
	"time"

	"arimelody-web/global"
)

type (
    Session struct {
        Token   string
        UserID  string
        Expires time.Time
    }
)

const TOKEN_LENGTH = 64
const TOKEN_CHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

var ADMIN_BYPASS = func() bool {
    if global.Args["adminBypass"] == "true" {
        fmt.Println("WARN: Admin login is currently BYPASSED. (-adminBypass)")
        return true
    }
    return false
}()

var ADMIN_ID_DISCORD = func() string {
    id := os.Getenv("DISCORD_ADMIN_ID")
    if id == "" { id = global.Config.Discord.AdminID }
    if id == "" {
        fmt.Printf("WARN: discord.admin_id not provided. Admin login will be unavailable.\n")
    }
    return id
}()

var sessions []*Session

func createSession(username string, expires time.Time) Session {
    return Session{
        Token: string(generateToken()),
        UserID: username,
        Expires: expires,
    }
}

func generateToken() string {
    var token []byte

    for i := 0; i < TOKEN_LENGTH; i++ {
        token = append(token, TOKEN_CHARS[rand.Intn(len(TOKEN_CHARS))])
    }

    return string(token)
}
