const TimezoneConfig = {
    timezone: localStorage.getItem('timezone') || 'Europe/Warsaw',
    
    availableTimezones: [
        { value: 'UTC', label: 'UTC', offset: 0 },
        { value: 'Europe/London', label: 'London (GMT/BST)', offset: 0 },
        { value: 'Europe/Paris', label: 'Central Europe (CET/CEST)', offset: 1 },
        { value: 'Europe/Warsaw', label: 'Warsaw (CET/CEST)', offset: 1 },
        { value: 'America/New_York', label: 'New York (EST/EDT)', offset: -5 },
        { value: 'America/Chicago', label: 'Chicago (CST/CDT)', offset: -6 },
        { value: 'America/Los_Angeles', label: 'Los Angeles (PST/PDT)', offset: -8 },
        { value: 'Asia/Tokyo', label: 'Tokyo (JST)', offset: 9 },
        { value: 'Asia/Shanghai', label: 'Shanghai (CST)', offset: 8 },
        { value: 'Australia/Sydney', label: 'Sydney (AEST/AEDT)', offset: 10 },
    ],
    
    setTimezone(tz) {
        this.timezone = tz;
        localStorage.setItem('timezone', tz);
        document.dispatchEvent(new CustomEvent('timezone-changed', { detail: tz }));
    },
    
    getTimezone() {
        return this.timezone;
    },
    
    getOffsetHours(tz = this.timezone) {
        const now = new Date();
        const tzDate = new Date(now.toLocaleString('en-US', { timeZone: tz }));
        const utcDate = new Date(now.toLocaleString('en-US', { timeZone: 'UTC' }));
        return (tzDate - utcDate) / 3600000;
    },
    
    formatDate(timestamp) {
        const date = new Date(timestamp);
        const tz = this.timezone;
        
        const options = { 
            timeZone: tz,
            year: 'numeric', month: '2-digit', day: '2-digit',
            hour: '2-digit', minute: '2-digit', second: '2-digit',
            hour12: false 
        };
        
        const formatter = new Intl.DateTimeFormat('en-GB', options);
        const parts = formatter.formatToParts(date);
        const get = (type) => parts.find(p => p.type === type).value;
        
        return `${get('day')}/${get('month')}/${get('year')} ${get('hour')}:${get('minute')}`;
    },
    
    formatTickMark(timestamp) {
        const date = new Date(timestamp * 1000);
        const tz = this.timezone;
        
        const options = { 
            timeZone: tz,
            year: 'numeric', month: '2-digit', day: '2-digit',
            hour: '2-digit', minute: '2-digit',
            hour12: false 
        };
        
        const formatter = new Intl.DateTimeFormat('en-GB', options);
        const parts = formatter.formatToParts(date);
        const get = (type) => parts.find(p => p.type === type).value;
        
        // If it's exactly midnight, just show the date, otherwise show time too
        const isMidnight = get('hour') === '00' && get('minute') === '00';
        if (isMidnight) {
            return `${get('day')}/${get('month')}/${get('year')}`;
        }
        return `${get('day')}/${get('month')} ${get('hour')}:${get('minute')}`;
    }
};

export { TimezoneConfig };
