// static/store/js/profile.js
/**
 * Store profile management page logic
 * Edit store business profile and contact information
 */

const storeProfileLog = window.LogConfig.loggers.storeProfile ||
    window.LogConfig.createLogger('storeProfile', false);

storeProfileLog.info('Loading...');

function storeProfile() {
    storeProfileLog.info('storeProfile() called');

    return {
        // Inherit base layout state
        ...data(),

        // Set page identifier
        currentPage: 'profile',

        // Loading states
        loading: true,
        error: '',
        saving: false,

        // Profile data
        profile: null,

        // Edit form
        form: {
            name: '',
            contact_email: '',
            contact_phone: '',
            website: '',
            business_address: '',
            tax_number: '',
            description: ''
        },

        // Form validation
        errors: {},

        // Track if form has changes
        hasChanges: false,

        async init() {
            // Load i18n translations
            await I18n.loadModule('tenancy');

            storeProfileLog.info('Profile init() called');

            // Guard against multiple initialization
            if (window._storeProfileInitialized) {
                storeProfileLog.warn('Already initialized, skipping');
                return;
            }
            window._storeProfileInitialized = true;

            // IMPORTANT: Call parent init first to set storeCode from URL
            const parentInit = data().init;
            if (parentInit) {
                await parentInit.call(this);
            }

            try {
                await this.loadProfile();
            } catch (error) {
                storeProfileLog.error('Init failed:', error);
                this.error = 'Failed to initialize profile page';
            }

            storeProfileLog.info('Profile initialization complete');
        },

        /**
         * Load store profile
         */
        async loadProfile() {
            this.loading = true;
            this.error = '';

            try {
                const response = await apiClient.get(`/store/profile`);

                this.profile = response;
                this.form = {
                    name: response.name || '',
                    contact_email: response.contact_email || '',
                    contact_phone: response.contact_phone || '',
                    website: response.website || '',
                    business_address: response.business_address || '',
                    tax_number: response.tax_number || '',
                    description: response.description || ''
                };

                this.hasChanges = false;
                storeProfileLog.info('Loaded profile:', this.profile.store_code);
            } catch (error) {
                storeProfileLog.error('Failed to load profile:', error);
                this.error = error.message || 'Failed to load profile';
            } finally {
                this.loading = false;
            }
        },

        /**
         * Mark form as changed
         */
        markChanged() {
            this.hasChanges = true;
        },

        /**
         * Validate form
         */
        validateForm() {
            this.errors = {};

            if (!this.form.name?.trim()) {
                this.errors.name = 'Business name is required';
            }

            if (this.form.contact_email && !this.isValidEmail(this.form.contact_email)) {
                this.errors.contact_email = 'Invalid email address';
            }

            if (this.form.website && !this.isValidUrl(this.form.website)) {
                this.errors.website = 'Invalid URL format';
            }

            return Object.keys(this.errors).length === 0;
        },

        /**
         * Check if email is valid
         */
        isValidEmail(email) {
            return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
        },

        /**
         * Check if URL is valid
         */
        isValidUrl(url) {
            try {
                new URL(url);
                return true;
            } catch {
                return url.match(/^(https?:\/\/)?[\w-]+(\.[\w-]+)+/) !== null;
            }
        },

        /**
         * Save profile changes
         */
        async saveProfile() {
            if (!this.validateForm()) {
                Utils.showToast(I18n.t('tenancy.messages.please_fix_the_errors_before_saving'), 'error');
                return;
            }

            this.saving = true;
            try {
                await apiClient.put(`/store/profile`, this.form);

                Utils.showToast(I18n.t('tenancy.messages.profile_updated_successfully'), 'success');
                storeProfileLog.info('Profile updated');

                this.hasChanges = false;
                await this.loadProfile();
            } catch (error) {
                storeProfileLog.error('Failed to save profile:', error);
                Utils.showToast(error.message || 'Failed to save profile', 'error');
            } finally {
                this.saving = false;
            }
        },

        /**
         * Reset form to original values
         */
        resetForm() {
            if (this.profile) {
                this.form = {
                    name: this.profile.name || '',
                    contact_email: this.profile.contact_email || '',
                    contact_phone: this.profile.contact_phone || '',
                    website: this.profile.website || '',
                    business_address: this.profile.business_address || '',
                    tax_number: this.profile.tax_number || '',
                    description: this.profile.description || ''
                };
            }
            this.hasChanges = false;
            this.errors = {};
        }
    };
}
