
variable "account" {
  type        = string
  description = "Snowflake account name"
  default     = "delphi"
}

variable "database_name" {
  type        = string
  description = "The name of the database (must be upper-case)."
  default     = "FANSIFTER_APP_REPORTING"
}

variable "schemas" {
  type = list(object({
    name                 = string
    is_managed           = optional(bool, true)
    create_roles         = optional(bool, true)
    read_role_name       = optional(string)
    read_write_role_name = optional(string)
    log_level            = optional(string)
    trace_level          = optional(string)
  }))
  description = "A list of schemas to create in the database"
  default = [
    { name = "CI_PR", is_managed = true, create_roles = true, log_level = "ERROR", trace_level = "ALWAYS" },
    { name = "CI_TEST", is_managed = true, create_roles = true, log_level = "ERROR", trace_level = "ALWAYS" },
    { name = "QA", is_managed = true, create_roles = true, log_level = "ERROR", trace_level = "ALWAYS" },
    { name = "QA_VIEWS", is_managed = true, create_roles = true, log_level = "ERROR", trace_level = "ALWAYS" },
    { name = "QA_CRM_FANS", is_managed = true, create_roles = true },
    { name = "QA_SEGMENT", is_managed = true, create_roles = true },
    { name = "QA_SHOPIFY", is_managed = true, create_roles = true },
    { name = "QA_MARKETING", is_managed = true, create_roles = true },
    { name = "QA_STREAMLIT_ROSTER_MANAGEMENT", is_managed = true, create_roles = true },
    { name = "PROD", is_managed = true, create_roles = true, log_level = "ERROR", trace_level = "ALWAYS" },
    { name = "PROD_VIEWS", is_managed = true, create_roles = true, log_level = "ERROR", trace_level = "ALWAYS" },
    { name = "PROD_CRM_FANS", is_managed = true, create_roles = true },
    { name = "PROD_SEGMENT", is_managed = true, create_roles = true },
    { name = "PROD_SHOPIFY", is_managed = true, create_roles = true },
    { name = "PROD_MARKETING", is_managed = true, create_roles = true },
    { name = "PROD_STREAMLIT_SME_MERCH", is_managed = true, create_roles = true },
    { name = "PROD_STREAMLIT_FAN_EXPORT", is_managed = true, create_roles = true },
    { name = "PROD_STREAMLIT_ROSTER_MANAGEMENT", is_managed = true, create_roles = true },
    { name = "DEV_RBOMBERG", is_managed = false, create_roles = true, log_level = "INFO", trace_level = "ALWAYS" },
    { name = "DEV_MMACHADO", is_managed = false, create_roles = true },
    { name = "PROD_STREAMLIT_FANSIFTER_BACKOFFICE", is_managed = true, create_roles = true },
  ]
}

variable "prod_views_names" {
  description = "Views in the PROD_VIEWS schema to create view-level access roles for"
  default = [
    # Ad Reporting
    "V_FS_AD_REPORTING_ACCOUNT_DBT",
    "V_FS_AD_REPORTING_CAMPAIGN_DBT",
    "V_FS_AD_REPORTING_CAMPAIGN_DATE_DBT",
    "V_FS_AD_REPORTING_CAMPAIGN_COUNTRY_DBT",
    "V_FS_AD_REPORTING_CAMPAIGN_COUNTRY_DATE_DBT",
    "V_FS_AD_REPORTING_AD_SET_DBT",
    "V_FS_AD_REPORTING_AD_SET_DATE_DBT",
    "V_FS_AD_REPORTING_AD_SET_COUNTRY_DBT",
    "V_FS_AD_REPORTING_AD_SET_COUNTRY_DATE_DBT",
    "V_FS_AD_REPORTING_AD_DBT",
    "V_FS_AD_REPORTING_AD_DATE_DBT",
    "V_FS_AD_REPORTING_AD_COUNTRY_DBT",
    "V_FS_AD_REPORTING_AD_COUNTRY_DATE_DBT",

    # Artist Roster
    "FS_ARTIST_ROSTER_DBT",
    "FS_SME_REP_OWNER_ARTIST_ROSTER_DBT",
    "FS_SME_IRL_REP_ARTIST_ROSTER_DBT",

    # Artist Views
    "V_FS_FANS_BY_ARTIST_DBT",
    "V_FS_FANS_BY_ARTIST_DATE_DBT",
    "V_FS_FANS_BY_ARTIST_COUNTRY_DBT",
    "V_FS_FANS_BY_ARTIST_COUNTRY_DATE_DBT",

    # Email Views
    "V_FS_EMAIL_AUTOMATED",
    "V_FS_EMAIL_CAMPAIGN",
  ]
}
