package migrations

import (
	"context"
	"database/sql"

	"github.com/pressly/goose/v3"
)

func init() {
	goose.AddMigrationContext(upRemoveAnnotationId, downRemoveAnnotationId)
}

func upRemoveAnnotationId(ctx context.Context, tx *sql.Tx) error {
	_, err := tx.ExecContext(ctx, `
create table annotation_dg_tmp
(
    user_id    varchar(255) default ''    not null,
    item_id    varchar(255) default ''    not null,
    item_type  varchar(255) default ''    not null,
    play_count integer      default 0,
    play_date  datetime,
    rating     integer      default 0,
    starred    bool         default FALSE not null,
    starred_at datetime,
    unique (user_id, item_id, item_type)
);

insert into annotation_dg_tmp(user_id, item_id, item_type, play_count, play_date, rating, starred, starred_at)
select user_id,
       item_id,
       item_type,
       play_count,
       play_date,
       rating,
       starred,
       starred_at
from annotation;

drop table annotation;

alter table annotation_dg_tmp
    rename to annotation;

create index annotation_play_count
    on annotation (play_count);

create index annotation_play_date
    on annotation (play_date);

create index annotation_rating
    on annotation (rating);

create index annotation_starred
    on annotation (starred);

create index annotation_starred_at
    on annotation (starred_at);

`)
	return err
}

func downRemoveAnnotationId(_ context.Context, _ *sql.Tx) error {
	return nil
}
