package upgrades

import (
	"cosmossdk.io/store/types"
	upgradetypes "cosmossdk.io/x/upgrade/types"
	"github.com/cosmos/cosmos-sdk/types/module"

	"github.com/archway-network/archway/app/keepers"
)

// Upgrade defines a struct containing necessary fields that a SoftwareUpgradeProposal
// must have written, in order for the state migration to go smoothly.
// An upgrade must implement this struct, and then set it in the app.go.
// The app.go will then define the handler.
type Upgrade struct {
	// Upgrade version name, for the upgrade handler, e.g. `v7`
	UpgradeName string

	// CreateUpgradeHandler defines the function that creates an upgrade handler
	CreateUpgradeHandler func(*module.Manager, module.Configurator, keepers.ArchwayKeepers) upgradetypes.UpgradeHandler

	// Store upgrades, should be used for any new modules introduced, new modules deleted, or store names renamed.
	StoreUpgrades types.StoreUpgrades
}

const (
	ArchwayLogo = `
	
            .-=+***#***+=-.          
         :+*###############*+-       
       =*#####################*=     
     -*#########################*-   
    +##########*+=---=+*##########+  
   +#########*:         :*#########+ 
  :#########+             +#########:
  +#########               *########+
  *########*   .-=+++=-.   *########*
  *########* .+#########+: *########*
  =########*:#############-*########=
  .*#######**#############**#######*.
   :*##############################: 
     =*#########################*=    
        -*###################*-      
          .-+*###########*+-.        

	`
)
