{_} = require 'underscore'

factories = {}

@Factory = Factory = (species, attributes={}) ->
  if species not of factories
    Factory.register(species)
  cloned = _.clone(factories[species])
  _.extend(cloned, attributes)

Factory.register = (species, attributes={}) ->
  cloned = _.clone(attributes)
  _.defaults(cloned, species: species)
  factories[species] = cloned

Factory.register 'Hitmontop',
  ability: 'Technician'
  moves: ['Rapid Spin', 'Mach Punch', 'Bullet Punch', 'Close Combat' ]
  evs: {attack: 252}

Factory.register 'Hitmonchan',
  ability: 'Iron Fist'
  moves: ['Ice Punch', 'Mach Punch', 'Bullet Punch', 'ThunderPunch' ]
  evs: {attack: 252}

Factory.register 'Hitmonlee',
  moves: ['Hi Jump Kick']

Factory.register 'Mew',
  ability: 'Synchronize'
  moves: ['Psychic', 'AncientPower']

Factory.register 'Corphish',
  moves: ['Trump Card', "Crunch", "Round"]

Factory.register 'Porygon-Z',
  ability: 'Adaptability'
  moves: ['Tri Attack', 'Flamethrower']
  evs: {specialAttack: 252}

Factory.register 'Heracross',
  ability: 'Guts'
  moves: ['Megahorn']
  evs: {attack: 252}

Factory.register 'Magikarp',
  moves: ['Splash', 'Tackle']

Factory.register 'Gyarados',
  moves: ['Dragon Dance', 'Ice Fang']

Factory.register 'Conkeldurr',
  moves: ['Drain Punch']

Factory.register 'Gliscor',
  moves: ['Acrobatics']

Factory.register 'Blaziken',
  moves: ['Brave Bird', 'Aerial Ace']

Factory.register 'Celebi',
  moves: ['Leaf Storm', 'Grass Knot']

Factory.register 'Weezing',
  moves: ['Haze', 'Psywave']

Factory.register 'Blissey',
  moves: ['Seismic Toss', 'Aromatherapy', 'Thunder Wave', 'Softboiled']

Factory.register 'Skarmory',
  moves: ['Spikes', 'Whirlwind']

Factory.register 'Zangoose',
  moves: ['Facade', 'Flail']

Factory.register 'Forretress',
  moves: ['Gyro Ball', 'Rapid Spin']

Factory.register 'Electrode',
  moves: ['Gyro Ball', 'Explosion']

Factory.register 'Camerupt',
  moves: ['Eruption', 'Yawn', 'Earthquake']

Factory.register 'Empoleon',
  moves: ['Brine']

Factory.register 'Lapras',
  moves: ['Sheer Cold']

Factory.register 'Audino',
  moves: ['Growl']

Factory.register 'Gengar',
  moves: ['Shadow Ball', 'Pain Split', 'Explosion', 'Clear Smog']

Factory.register 'Drapion',
  moves: ['Knock Off', 'Swords Dance']

Factory.register 'Alakazam',
  moves: ['Trick']

Factory.register 'Gastrodon',
  moves: ['Recover']
  ability: 'Sticky Hold'

Factory.register 'Latias',
  moves: ['Memento']

Factory.register 'Poliwrath',
  moves: ['Belly Drum']

Factory.register 'Shuckle',
  moves: ['Acupressure']

Factory.register 'Dratini',
  moves: ['Dragon Rage']

Factory.register 'Politoed',
  moves: ['Perish Song', 'Endeavor']
  ability: 'Drizzle'

Factory.register 'Dugtrio',
  moves: ['Magnitude', 'Dig']

Factory.register 'Regirock',
  moves: ['Rock Slide']

Factory.register 'Shaymin',
  moves: ['Seed Flare']

Factory.register 'Ditto',
  moves: ['Transform']

Factory.register 'Metagross',
  moves: ['Meteor Mash']

Factory.register 'Gallade',
  moves: ['Close Combat']

Factory.register 'Cloyster',
  moves: ['Shell Smash']