import { DateTime } from 'luxon'
import { BaseModel, column, hasMany, afterCreate } from '@adonisjs/lucid/orm'
import type { HasMany } from '@adonisjs/lucid/types/relations'
import IntlCourierRate from './intl_courier_rate.js'

export default class IntlCourierRateGroup extends BaseModel {
  @column({ isPrimary: true })
  declare id: number

  @column()
  declare price_id: string

  @column()
  declare name: string

  @column()
  declare description: string

  @column({ serialize: (value) => value === 1 })
  declare is_default: boolean

  @column({ serialize: (value) => value === 1 })
  declare is_active: boolean

  @hasMany(() => IntlCourierRate, { localKey: 'id', foreignKey: 'intl_courier_rate_group_id' })
  declare intl_courier_rate_details: HasMany<typeof IntlCourierRate>

  @column.dateTime({ autoCreate: true })
  declare created_at: DateTime

  @column.dateTime({ autoCreate: true, autoUpdate: true })
  declare updated_at: DateTime

  @afterCreate()
  public static async createPricingId(pricing: IntlCourierRateGroup) {
    pricing.price_id = `ICR-${String(pricing.id).padStart(6, '0')}`
    await pricing.save()
  }
}
