package com.ycwl.basic.controller.mobile;

import com.ycwl.basic.annotation.IgnoreToken;
import com.ycwl.basic.model.mobile.scenic.content.ScenicTemplateContentVO;
import com.ycwl.basic.model.pc.template.resp.TemplateRespVO;
import com.ycwl.basic.puzzle.entity.PuzzleTemplateEntity;
import com.ycwl.basic.puzzle.repository.PuzzleRepository;
import com.ycwl.basic.repository.TemplateRepository;
import com.ycwl.basic.utils.ApiResponse;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 * 移动端模板接口
 */
@RestController
@RequestMapping("/api/mobile/template/v1")
@RequiredArgsConstructor
public class AppTemplateController {

    private final TemplateRepository templateRepository;
    private final PuzzleRepository puzzleRepository;

    /**
     * 根据模板ID获取封面URL
     *
     * @param templateId 模板ID
     * @return 模板封面URL
     */
    @GetMapping("/cover/{templateId}")
    public ApiResponse<String> getTemplateCoverUrl(@PathVariable("templateId") Long templateId) {
        if (templateId == null) {
            return ApiResponse.fail("模板ID不能为空");
        }

        TemplateRespVO template = templateRepository.getTemplate(templateId);
        if (template == null) {
            return ApiResponse.fail("未找到对应的模板");
        }

        String coverUrl = template.getCoverUrl();
        if (coverUrl == null || coverUrl.isEmpty()) {
            return ApiResponse.fail("该模板没有封面地址");
        }

        return ApiResponse.success(coverUrl);
    }

    /**
     * 根据景区ID获取所有模板封面URL列表（用于前端预缓存）
     *
     * @param scenicId 景区ID
     * @return 模板封面URL列表
     */
    @GetMapping("/scenic/{scenicId}/covers")
    @IgnoreToken
    public ApiResponse<List<String>> getScenicTemplateCoverUrls(@PathVariable("scenicId") Long scenicId) {
        if (scenicId == null) {
            return ApiResponse.fail("景区ID不能为空");
        }

        List<String> coverUrls = new ArrayList<>();

        // 获取普通模板封面
        List<TemplateRespVO> templateList = templateRepository.getTemplateListByScenicId(scenicId);
        templateList.stream()
                .map(TemplateRespVO::getCoverUrl)
                .filter(Objects::nonNull)
                .filter(url -> !url.isEmpty())
                .forEach(coverUrls::add);

        // 获取拼图模板封面（使用缓存）
        List<PuzzleTemplateEntity> puzzleTemplateList = puzzleRepository.listTemplateByScenic(scenicId);
        puzzleTemplateList.stream()
                .map(PuzzleTemplateEntity::getCoverImage)
                .filter(Objects::nonNull)
                .filter(url -> !url.isEmpty())
                .forEach(coverUrls::add);

        return ApiResponse.success(coverUrls);
    }

    /**
     * 根据景区ID获取所有模板内容列表（返回模板基础信息，与 faceId 无关）
     *
     * @param scenicId 景区ID
     * @return 景区模板内容列表
     */
    @GetMapping("/scenic/{scenicId}/contents")
    @IgnoreToken
    public ApiResponse<List<ScenicTemplateContentVO>> getScenicTemplateContents(@PathVariable("scenicId") Long scenicId) {
        if (scenicId == null) {
            return ApiResponse.fail("景区ID不能为空");
        }

        List<ScenicTemplateContentVO> contentList = new ArrayList<>();

        // 获取普通模板
        List<TemplateRespVO> templateList = templateRepository.getTemplateListByScenicId(scenicId);
        for (TemplateRespVO template : templateList) {
            ScenicTemplateContentVO content = new ScenicTemplateContentVO();
            content.setGoodsType(0); // 普通模板默认商品类型为 0
            content.setName(template.getName());
            content.setGroup(template.getGroup());
            content.setTemplateId(template.getId());
            content.setTemplateCoverUrl(template.getCoverUrl());
            contentList.add(content);
        }

        // 获取拼图模板
        List<PuzzleTemplateEntity> puzzleTemplateList = puzzleRepository.listTemplateByScenic(scenicId);
        for (PuzzleTemplateEntity puzzleTemplate : puzzleTemplateList) {
            ScenicTemplateContentVO content = new ScenicTemplateContentVO();
            content.setGoodsType(3); // 拼图模板商品类型为 3
            content.setName(puzzleTemplate.getName());
            content.setGroup("氛围拼图"); // 拼图模板固定分组
            content.setTemplateId(puzzleTemplate.getId());
            content.setTemplateCoverUrl(puzzleTemplate.getCoverImage());
            contentList.add(content);
        }

        return ApiResponse.success(contentList);
    }
}
