require 'fog/core/collection'
require 'fog/aws/models/rds/snapshot'

module Fog
  module AWS
    class RDS

      class Snapshots < Fog::Collection
        attribute :server
        attribute :filters
        model Fog::AWS::RDS::Snapshot

        def initialize(attributes)
          self.filters ||= {}
          if attributes[:server]
            filters[:identifier] = attributes[:server].id
          end
          if attributes[:type]
            filters[:type] = attributes[:type]
          end
          super
        end

        # This will return a single page based on the current or provided filters,
        # updating the filters with the marker for the next page.  Calling this repeatedly
        # will iterate through pages.
        def all(filters = filters)
          self.filters.merge!(filters)

          data = []
          begin
            result = service.describe_db_snapshots(filters).body['DescribeDBSnapshotsResult']
            self.filters[:marker] = result['Marker']
            data.concat(result['DBSnapshots'])
          end while self.filters[:marker]
          load(data)
        end

        def get(identity)
          data = service.describe_db_snapshots(:snapshot_id => identity).body['DescribeDBSnapshotsResult']['DBSnapshots'].first
          new(data) # data is an attribute hash
        rescue Fog::AWS::RDS::NotFound
          nil
        end

        def new(attributes = {})
          if server
            super({ :instance_id => server.id }.merge!(attributes))
          else
            super
          end
        end

      end
    end
  end
end