package migrations

import (
	"context"

	"github.com/uptrace/bun"
)

func init() {
	migrations.MustRegister(func(ctx context.Context, db *bun.DB) error {
		_, err := db.ExecContext(ctx, `
create table if not exists tribes
(
    id               bigint                                             not null,
    server_key       varchar(100)                                       not null
        references servers,
    name             varchar(255)                                       not null,
    tag              varchar(10)                                        not null,
    num_members      bigint                   default 0,
    num_villages     bigint                   default 0,
    points           bigint                   default 0,
    all_points       bigint                   default 0,
    rank             bigint                   default 0,
    dominance        double precision         default 0,
    created_at       timestamp with time zone default CURRENT_TIMESTAMP not null,
    deleted_at       timestamp with time zone,
    rank_att         bigint                   default 0,
    score_att        bigint                   default 0,
    rank_def         bigint                   default 0,
    score_def        bigint                   default 0,
    rank_sup         bigint                   default 0,
    score_sup        bigint                   default 0,
    rank_total       bigint                   default 0,
    score_total      bigint                   default 0,
    profile_url      varchar(150),
    best_rank        bigint                   default 999999,
    best_rank_at     timestamp with time zone default CURRENT_TIMESTAMP not null,
    most_points      bigint                   default 0,
    most_points_at   timestamp with time zone default CURRENT_TIMESTAMP not null,
    most_villages    bigint                   default 0,
    most_villages_at timestamp with time zone default CURRENT_TIMESTAMP not null,
    primary key (id, server_key)
);

create index if not exists tribes_server_key_idx
    on tribes (server_key);
`)

		return err
	}, func(ctx context.Context, db *bun.DB) error {
		_, err := db.ExecContext(ctx, "drop table if exists tribes cascade;")
		return err
	})
}
