/*
 * Copyright 2025 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.hbasesoft.framework.ai.agent.tool.browser;

import com.hbasesoft.framework.ai.agent.config.IManusProperties;
import com.hbasesoft.framework.ai.agent.tool.filesystem.UnifiedDirectoryManager;
import com.hbasesoft.framework.ai.agent.tool.innerStorage.SmartContentSavingService;

/**
 * Chrome driver service interface providing browser driver management functions
 */
public interface IChromeDriverService {

    /**
     * Get shared directory
     * 
     * @return Shared directory path
     */
    String getSharedDir();

    /**
     * Save cookies from all drivers to global shared directory
     */
    void saveCookiesToSharedDir();

    /**
     * Load cookies from global shared directory to all drivers
     */
    void loadCookiesFromSharedDir();

    /**
     * Get driver wrapper for specified plan ID
     * 
     * @param planId Plan ID
     * @return Driver wrapper
     */
    DriverWrapper getDriver(String planId);

    /**
     * Close driver for specified plan
     * 
     * @param planId Plan ID
     */
    void closeDriverForPlan(String planId);

    /**
     * Clean up all resources
     */
    void cleanup();

    /**
     * Set Manus properties
     * 
     * @param manusProperties Manus properties
     */
    void setManusProperties(IManusProperties manusProperties);

    /**
     * Get Manus properties
     * 
     * @return Manus properties
     */
    IManusProperties getManusProperties();

    /**
     * Get internal storage service
     * 
     * @return Internal storage service
     */
    SmartContentSavingService getInnerStorageService();

    /**
     * Get unified directory manager
     * 
     * @return Unified directory manager
     */
    UnifiedDirectoryManager getUnifiedDirectoryManager();

}
