const logger = require('winston');

const {
  assetDefaults: { thumbnail: defaultThumbnail },
  details: { host }
} = require('@config/siteConfig');

const getterMethods = {
  generated_extension() {
    switch (this.content_type) {
      case 'image/jpeg':
      case 'image/jpg':
        return 'jpg';
      case 'image/png':
        return 'png';
      case 'image/gif':
        return 'gif';
      case 'video/mp4':
        return 'mp4';
      default:
        logger.debug('setting unknown file type as file extension jpg');
        return 'jpg';
    }
  },

  // TODO: Factor this out.
  generated_thumbnail() {
    return this.thumbnail_url || defaultThumbnail;
  },

  generated_channel() {
    console.log(this);
    //
  }
}

export default (sequelize, {
  BOOLEAN,
  DATE,
  DECIMAL,
  ENUM,
  INTEGER,
  STRING,
  TEXT,
}) => sequelize.define(
  'claim',
  {
    id: {
      primaryKey: true,
      type: INTEGER,
      set() { },
    },
    transaction_hash_id: {
      type: STRING,
      set() { },
    },
    vout: {
      type: INTEGER,
      set() { },
    },
    name: {
      type: STRING,
      set() { },
    },
    claim_id: {
      type: STRING,
      set() { },
    },
    claim_type: {
      type: INTEGER,
      set() { },
    },
    publisher_id: {
      type: STRING,
      set() { },
    },
    publisher_sig: {
      type: STRING,
      set() { },
    },
    certificate: {
      type: STRING,
      set() { },
    },
    sd_hash: {
      type: STRING,
      set() { },
    },
    transaction_time: {
      type: INTEGER,
      set() { },
    },
    version: {
      type: STRING,
      set() { },
    },
    valid_at_height: {
      type: INTEGER,
      set() { },
    },
    height: {
      type: INTEGER,
      set() { },
    },
    effective_amount: {
      type: INTEGER,
      set() { },
    },
    author: {
      type: STRING,
      set() { },
    },
    description: {
      type: STRING,
      set() { },
    },
    content_type: {
      type: STRING,
      set() { },
    },
    is_nsfw: {
      type: BOOLEAN,
      set() { },
    },
    language: {
      type: STRING,
      set() { },
    },
    thumbnail_url: {
      type: STRING,
      set() { },
    },
    title: {
      type: STRING,
      set() { },
    },
    fee: {
      type: DECIMAL(58, 8),
      set() { },
    },
    fee_currency: {
      type: STRING,
      set() { },
    },
    bid_state: {
      type: ENUM('Active', 'Expired', 'Controlling', 'Spent', 'Accepted'),
      set() { },
    },
    created_at: {
      type: DATE(6),
      set() { },
    },
    modified_at: {
      type: DATE(6),
      set() { },
    },
    fee_address: {
      type: STRING,
      set() { },
    },
    claim_address: {
      type: STRING,
      set() { },
    },
  },
  {
    freezeTableName: true,
    getterMethods,
    timestamps: false, // don't use default timestamps columns
  }
);