use sea_orm_migration::prelude::{sea_query::extension::postgres::Type, *};
use sea_orm_migration::sea_orm::{ConnectionTrait, DbBackend};

#[derive(DeriveMigrationName)]
pub struct Migration;

#[async_trait::async_trait]
impl MigrationTrait for Migration {
    async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
        let db = manager.get_connection();

        if db.get_database_backend() == DbBackend::Postgres {
            manager
                .create_type(
                    Type::create()
                        .as_enum(Tea::Enum)
                        .values([Tea::EverydayTea, Tea::BreakfastTea])
                        .to_owned(),
                )
                .await?;
        }

        Ok(())
    }

    async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
        let db = manager.get_connection();

        if db.get_database_backend() == DbBackend::Postgres {
            manager
                .drop_type(Type::drop().name(Tea::Enum).to_owned())
                .await?;
        }

        Ok(())
    }
}

#[derive(DeriveIden)]
pub enum Tea {
    #[sea_orm(iden = "tea")]
    Enum,
    #[sea_orm(iden = "EverydayTea")]
    EverydayTea,
    #[sea_orm(iden = "BreakfastTea")]
    BreakfastTea,
}
