package main

import (
	"blackforestbytes.com/simplecloudnotifier/db/schema"
	"context"
	"database/sql"
	"fmt"
	"github.com/glebarez/go-sqlite"
	"gogs.mikescher.com/BlackForestBytes/goext/exerr"
	"gogs.mikescher.com/BlackForestBytes/goext/langext"
	"gogs.mikescher.com/BlackForestBytes/goext/sq"
	"time"
)

func main() {
	exerr.Init(exerr.ErrorPackageConfigInit{})

	ctx, cancel := context.WithTimeout(context.Background(), 1011*time.Second)
	defer cancel()

	if !langext.InArray("sqlite3", sql.Drivers()) {
		sqlite.RegisterAsSQLITE3()
	}

	for key, schemaObj := range langext.AsSortedBy(langext.MapToArr(schema.PrimarySchema), func(v langext.MapEntry[int, schema.Def]) int { return v.Key }) {
		var h0 string
		if key == 1 {
			h0 = "N/A"
		} else {
			var err error
			h0, err = sq.HashGoSqliteSchema(ctx, schemaObj.Value.SQL)
			if err != nil {
				h0 = "ERR"
			}
		}
		fmt.Printf("PrimarySchema    [%d] := %s%s\n", schemaObj.Key, h0, langext.Conditional(schemaObj.Key == schema.PrimarySchemaVersion, "     (active)", ""))
	}

	fmt.Printf("\n")

	for _, schemaObj := range langext.AsSortedBy(langext.MapToArr(schema.RequestsSchema), func(v langext.MapEntry[int, schema.Def]) int { return v.Key }) {
		h0, err := sq.HashGoSqliteSchema(ctx, schemaObj.Value.SQL)
		if err != nil {
			h0 = "ERR"
		}
		fmt.Printf("RequestsSchema   [%d] := %s%s\n", schemaObj.Key, h0, langext.Conditional(schemaObj.Key == schema.RequestsSchemaVersion, "     (active)", ""))
	}

	fmt.Printf("\n")

	for _, schemaObj := range langext.AsSortedBy(langext.MapToArr(schema.LogsSchema), func(v langext.MapEntry[int, schema.Def]) int { return v.Key }) {
		h0, err := sq.HashGoSqliteSchema(ctx, schemaObj.Value.SQL)
		if err != nil {
			h0 = "ERR"
		}
		fmt.Printf("LogsSchema       [%d] := %s%s\n", schemaObj.Key, h0, langext.Conditional(schemaObj.Key == schema.LogsSchemaVersion, "     (active)", ""))
	}

	fmt.Printf("\n")
}