package com.moka.gdtauto.service;

import java.util.List;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.moka.gdtauto.entity.AdPlan;
import com.moka.gdtauto.entity.AdPlanConf;
import com.tencent.ads.model.v3.WriteTargetingSetting;
import com.tencent.ads.v3.TencentAds;

/**
 * 广告计划服务接口
 * 
 * @author moka
 * @since 2026-02-24
 */
public interface AdPlanService extends IService<AdPlan> {

    //修改预算
    void updateAdgroupDailyBudget(AdPlanConf conf, AdPlan plan, Long dailyBudget) throws Exception;

    void updateAdgroupTargeting(TencentAds tencentAds, AdPlanConf conf, AdPlan plan, WriteTargetingSetting targeting) throws Exception;
    /**
     * 创建广告计划
     * 
     * @param adPlan 广告计划
     * @return 计划ID
     */
    Long createAdPlan(AdPlan adPlan);

    /**
     * 更新广告计划
     * 
     * @param adPlan 广告计划
     * @return 是否成功
     */
    boolean updateAdPlan(AdPlan adPlan);

    /**
     * 删除广告计划
     * 
     * @param planId 计划ID
     * @return 是否成功
     */
    boolean deleteAdPlan(Long planId);

    /**
     * 获取广告计划列表（分页）
     * 
     * @param accountId 账户ID（可选）
     * @param status 状态（可选）
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 计划分页列表
     */
    Page<AdPlan> getAdPlans(Long confId, Long accountId, Long adgroupId, Integer status, Integer pageNum, Integer pageSize);

    /**
     * 获取广告计划详情
     * 
     * @param planId 计划ID
     * @return 计划信息
     */
    AdPlan getAdPlanById(Long planId);

    List<AdPlan> getPlansByConfId(Long confId);

    void syncAdPlanStatus(Long confId);
}
