/**
 ** Created Date : 29 Aug 2015
 ** Author : Siddharth Varshneya
 ** Task : T-447593
 */
public with sharing class PreferenceCenterController {
    public map<Id, Subscription__c> mapSubs { get; set; }
    public list<String> selectedSubscriptions { get; set; }
    public Fan__c fan { get; set; }
    public String userLangString { get; set; }

    public PreferenceCenterController() {
        selectedSubscriptions = new List<String>();
        mapSubs = new Map<Id, Subscription__c>();
        try {
            String fanID = ApexPages.currentPage().getParameters().get('id');
            if (String.isBlank(ApexPages.currentPage().getParameters().get('id'))) {
                ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.ERROR, 'Error: Invalid Id.');
                ApexPages.addMessage(myMsg);
                return;
            }
            for (Fan__c obj : [
                SELECT f.Id, f.Email__c, f.City__c, f.Birthdate__c, f.Address_2__c, f.Address_1__c
                FROM Fan__c f
                WHERE Encrypted_ID__c = :ApexPages.currentPage().getParameters().get('id')
            ]) {
                fan = obj;
            }
        } catch (Exception e) {
            ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.ERROR, e.getMessage());
            ApexPages.addMessage(myMsg);
            return;
        }
        system.debug('==1==' + ApexPages.currentPage().getCookies().get('lang'));
        if (ApexPages.currentPage().getCookies().get('lang') != null) {
            // lang is a custom cookie defined.
            Cookie userLang = ApexPages.currentPage().getCookies().get('lang');
            userLangString = userLang.getValue();
        }

        if (String.isBlank(userLangString)) {
            userLangString = 'el';
        }

        String browserLanguage = ApexPages.currentPage().getHeaders().get('Accept-Language');
        //if(!String.isBlank(browserLanguage)){
        //	userLangString = browserLanguage.subString(0,browserLanguage.indexOf(','));
        //}

        if (!String.isBlank(browserLanguage) && browserLanguage.contains(',')) {
            userLangString = browserLanguage.subString(0, browserLanguage.indexOf(','));
        } else {
            userLangString = browserLanguage;
        }
    }
    //test code
    //public void refreshPage(){
    // Cookie c = new Cookie('lang', 'de_AT',null,-1,true);
    //ApexPages.currentPage().setCookies(new Cookie[]{c});
    // interviewdate=Apexpages.currentPage().getParameters().get('interviewDate');
    // userLangString = interviewdate;
    //PageReference p = ApexPages.currentPage();
    //p.setRedirect(true);
    // return p;
    //}

    public List<SelectOption> getSubscriptions() {
        if (fan != null) {
            mapSubs = new Map<Id, Subscription__c>(
                [
                    SELECT
                        s.Territory_ID__c,
                        s.Source__c,
                        s.Signup_URL__c,
                        s.Name,
                        s.Migration_Id__c,
                        s.Mailing_List_ID__c,
                        s.Id,
                        s.Form_ID__c,
                        s.Fan_ID__c,
                        s.Confirmation_Email_Id__c,
                        s.Mailing_List_Name__c,
                        s.Active__c
                    FROM Subscription__c s
                    WHERE Fan_ID__c = :fan.Id
                ]
            );
        } else {
            ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.ERROR, 'Error: Invalid Id.');
            ApexPages.addMessage(myMsg);
            return null;
        }
        List<SelectOption> options = new List<SelectOption>();
        try {
            for (Subscription__c sub : mapSubs.values()) {
                if (sub.Active__c) {
                    selectedSubscriptions.add(sub.Id);
                }
                options.add(new SelectOption(sub.Id, sub.Mailing_List_Name__c));
            }
            system.debug('==selectedSubscriptions==' + selectedSubscriptions);
        } catch (Exception e) {
            ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.ERROR, e.getMessage());
            ApexPages.addMessage(myMsg);
        }
        return options;
    }

    public PageReference unsubscribe() {
        TriggerControl.disableNewFunctionality();
        list<Subscription_History__c> lstSubscriptionHistory = new List<Subscription_History__c>();
        Subscription_History__c objSH = new Subscription_History__c();
        system.debug('==mapSubs==' + mapSubs);
        set<String> sels = new Set<String>();
        for (String key : selectedSubscriptions) {
            sels.add(key);
        }

        system.debug('==sels==' + sels);
        for (Subscription__c sub : mapSubs.values()) {
            objSH = new Subscription_History__c();
            if (sub.Active__c && !sels.contains(sub.Id)) {
                objSH.Action__c = 'Unsub';
                system.debug('==Unsub==' + sub);
            } else if (!sub.Active__c && sels.contains(sub.Id)) {
                objSH.Action__c = 'Sign up';
                system.debug('==Sign==' + sub);
            }

            if ((sub.Active__c && !sels.contains(sub.Id)) || (!sub.Active__c && sels.contains(sub.Id))) {
                objSH.Fan_ID__c = fan.Id;
                objSH.Expiration_Date__c = null;
                objSH.Mailing_List_ID__c = sub.Mailing_List_ID__c;
                objSH.Signup_URL__c = '';
                objSH.Source__c = 'Wordpress';
                objSH.Subscription_ID__c = sub.Id;
                lstSubscriptionHistory.add(objSH);
                system.debug('==lstSubscriptionHistory==' + lstSubscriptionHistory);
            }
        }
        system.debug('==lstSubscriptionHistory1==' + lstSubscriptionHistory);
        if (lstSubscriptionHistory.size() > 0) {
            try {
                insert lstSubscriptionHistory;
            } catch (Exception e) {
                ApexPages.addMessage(new ApexPages.Message(ApexPages.severity.ERROR, e.getMessage()));
                return null;
            }
        }
        Pagereference pg = new Pagereference('/apex/PreferenceCenterConfirmation');
        pg.setRedirect(true);
        return pg;
    }
}
