# frozen_string_literal: true class DuplicateReportCreationValidator < ActiveModel::Validator def validate(record) is_image = record.post&.media_type == 'image' if record.post.nil? record.errors.add :base, I18n.t('duplicate_reports.errors.image_nil') elsif record.duplicate_of_post.nil? record.errors.add :base, I18n.t('duplicate_reports.errors.target_image_nil') elsif record.post_id == record.duplicate_of_post_id record.errors.add :base, I18n.t('duplicate_reports.errors.identical_images') elsif record.post.media_type != record.duplicate_of_post.media_type record.errors.add :base, I18n.t('duplicate_reports.errors.different_types') elsif is_image && (record.post.image.is_animated? != record.duplicate_of_post.image.is_animated?) record.errors.add :base, I18n.t('duplicate_reports.errors.animated_and_still_image') elsif is_image && [record.post.mime_type, record.duplicate_of_post.image.mime_type].include?('video/webm') && record.post.image.mime_type != record.duplicate_of_post.image.mime_type record.errors.add :base, I18n.t('duplicate_reports.errors.webm_and_other') elsif DuplicateReport.exists?(post_id: record.post_id, duplicate_of_post_id: record.duplicate_of_post_id) record.errors.add :base, I18n.t('duplicate_reports.errors.target_already_reported') end end end