package migrate

import (
	"github.com/pingcap/log"
	"go.uber.org/zap"
	"gorm.io/gorm"
)

var _ = AddDBMigrateRecord(
	"202512051800",
	func(db *gorm.DB) error {
		plcAttachDomains := `
	CREATE TABLE IF NOT EXISTS plc_attach_domains (
	id varchar(255) NOT NULL, 
	cluster_id varchar(255) NOT NULL,
	cloud_provider VARCHAR(64) NOT NULL,
	private_link_connection_id VARCHAR(255) NOT NULL,
	type VARCHAR(64) NOT NULL, 
	created_by varchar(64) NOT NULL,
	created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
	updated_at TIMESTAMP DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
	unique_id VARCHAR(255) NOT NULL, 
	hosted_zone VARCHAR(64) NOT NULL, 
	PRIMARY KEY (id),
	UNIQUE INDEX uk_hu (hosted_zone,unique_id)
);
`
		err := db.Exec(plcAttachDomains).Error
		if err != nil {
			log.Error("create table plc_attach_domains failed", zap.Error(err))
		}

		plcDomainRecords := `
	CREATE TABLE IF NOT EXISTS plc_domain_records (
	attach_domain_id varchar(255) NOT NULL, 
	cluster_id varchar(255) NOT NULL,
	cloud_provider VARCHAR(64) NOT NULL,
	private_link_connection_id VARCHAR(255) NOT NULL,
	record VARCHAR(255) NOT NULL,
	value VARCHAR(255) NOT NULL,
	state VARCHAR(64) NOT NULL,
	aws_route53_create_change_id VARCHAR(255) DEFAULT NULL,
	aws_route53_delete_change_id VARCHAR(255) DEFAULT NULL,
	ali_dns_record_id bigint DEFAULT NULL,
	message text DEFAULT NULL,
	created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
	updated_at TIMESTAMP DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
	INDEX idx_state (state),
	INDEX idx_ids (cluster_id, private_link_connection_id, attach_domain_id)
	);
`
		err = db.Exec(plcDomainRecords).Error
		if err != nil {
			log.Error("create table plc_domain_records failed", zap.Error(err))
		}
		alter := "ALTER TABLE `private_link_connections` ADD COLUMN `cluster_status_id` BIGINT NULL DEFAULT NULL"
		if err := db.Exec(alter).Error; err != nil {
			log.Error("add column 'cluster_status_id' to `private_link_connections` failed", zap.Error(err))
			return err
		}
		return nil
	},
)
