/***********************************************************************************************************
 * Name         : AWAL_OpportunityTriggerHandler
 * Purpose      : Opportunity Handler for AWAL
 **********************************************************************************************************/

public with sharing class AWAL_OpportunityTriggerHandler {
    public static void onBeforeInsert(List<Opportunity> newList) {
        AWAL_OpportunityTriggerHelper.clearCloneFields(newList);
        AWAL_OpportunityTriggerHelper.formatNumericFields(newList, null);
        CurrencyUtils.refreshExchangeRate(newList, null);
        AWAL_OpportunityTriggerHelper.setApprover(newList, null);
        AWAL_OpportunityTriggerHelper.upsertMaxApprovedTerms(newList, null);
        AWAL_OpportunityTriggerHelper.validateOpportunityStages(newList, null);
        AWAL_OpportunityTriggerHelper.setAccountFromArtistOrLabel(newList, null);
    }

    public static void onAfterInsert(List<Opportunity> newList) {
        AWAL_EmailAlertsHandler.sendStageChangesNotifications(newList, null);
    }

    public static void onBeforeUpdate(List<Opportunity> newList, Map<Id, Opportunity> oldMap) {
        AWAL_OpportunityTriggerHelper.handleFieldVisibilityDependencies(newList, oldMap);
        AWAL_OpportunityTriggerHelper.formatNumericFields(newList, oldMap);
        CurrencyUtils.refreshExchangeRate(newList, oldMap);
        AWAL_OpportunityTriggerHelper.setApprover(newList, oldMap);
        AWAL_OpportunityTriggerHelper.validateMaxApprovedTerms(newList, oldMap);
        AWAL_OpportunityTriggerHelper.validateApprover(newList, oldMap);
        AWAL_OpportunityTriggerHelper.validateOpportunityStages(newList, oldMap);
        AWAL_OpportunityTriggerHelper.validateRequiredFieldsByStage(newList);
        AWAL_OpportunityTriggerHelper.validateAmendments(newList, oldMap);
        AWAL_OpportunityTriggerHelper.setAccountFromArtistOrLabel(newList, oldMap);
    }

    public static void onAfterUpdate(List<Opportunity> newList, Map<Id, Opportunity> oldMap) {
        AWAL_OpportunityTriggerHelper.upsertMaxApprovedTerms(newList, oldMap);
        AWAL_OpportunityTriggerHelper.logFieldHistory(newList, oldMap);
        AWAL_EmailAlertsHandler.sendStageChangesNotifications(newList, oldMap);
        //AWAL_OpportunityTriggerHelper.sendClosedWonEmail(newList, oldMap);
    }
}