using DFS.AI.API.Helper;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.AI;

namespace DFS.AI.API.Controllers;

[ApiController]
[Route("[controller]/[action]")]
public class ModelMessageController : ControllerBase
{
    private static readonly string[] Summaries =
    [
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    ];

    //[HttpGet(Name = "GetWeatherForecast")]
    //public IEnumerable<WeatherForecast> Get()
    //{
    //    return Enumerable.Range(1, 5).Select(index => new WeatherForecast
    //    {
    //        Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
    //        TemperatureC = Random.Shared.Next(-20, 55),
    //        Summary = Summaries[Random.Shared.Next(Summaries.Length)]
    //    })
    //    .ToArray();
    //}

    [HttpGet(Name = "GetModel")]
    public Task<ChatModelResponse> GetModel(string promt)
    {
        var promtStr = $$"""
        你是一名铁路票务意图识别专家，负责在前端界面与后端服务之间准确判断用户意图。
        仅从以下选项中选择：订票意图、退票意图、咨询意图。

        <context>
        系统当前时间：2025年12月29日 18:00
        用户Id：Devin
        用户等级：VIP会员
        </context>


        请严格以如下 JSON 格式返回结果：
        {
            "intention": "<订票意图/退票意图/咨询意图>",
            "reason": "<简要说明识别理由>"
        }
        <example>
        用户请求：我的票能退吗？
        意图：
        {
            "intention": "退票意图",
            "reason": "用户询问是否可以退票"
        }
        </example>

        <example>
        用户请求：请问高铁可以带宠物吗？
        意图：
        {
            "intention": "咨询意图",
            "reason": "用户咨询乘车规则，非订退票"
        }
        </example>
        用户请求：{{promt}}
        若无法明确判断，则选择 "咨询意图"，理由写 "输入不够明确，默认为咨询"
        """;
        return new ChatHandle().ChatOllamaModel(promtStr, new ChatOptions()
        {
            Temperature = 0.1f,      // 低随机性，保证稳定输出
            TopP = 0.9f,             // 核采样
            MaxOutputTokens = 120    // 限制输出长度
        });
    }


    [HttpGet()]
    public Task<ChatModelResponse> Fuel(string promt)
    {
        var promtStr = $$"""
        你需要识别用户的加油意图，并根据用户请求分类为以下选项之一：
        * 加油意图
        * 发票意图
        * 咨询意图
        * 售后意图

        当遇到92，95，98，0号，柴油需识别对应的油品，

        请严格以如下 JSON 格式返回分析结果：
        {
            "intention": "<加油意图/发票意图/咨询意图/售后意图>",
            "reason": "<简要说明识别理由>",
            "Remark":"<油品/金额>"
        }

        注意事项：  
        1. 仅从用户请求中提取明确的意图，不提供额外信息或推测。  
        2. 识别理由需简洁明了，直接引用或总结用户请求的关键词和语义。  

        以下为示例：  

        <example>  
        用户请求：帮我加92，200元？  
        意图：  
        {  
            "intention": "加油意图",  
            "reason": "用户询问定量加油"，
            "Remark":"92/200"  
        }  
        </example>  

        <example>  
        用户请求：帮我加200  
        意图：  
        {  
            "intention": "加油意图",  
            "reason": "用户询问加200元"，
            "Remark":"0/200"  
        }  
        </example>  

        <example>  
        用户请求：帮我加1百92  
        意图：  
        {  
            "intention": "加油意图",  
            "reason": "用户询问加100元"，
            "Remark":"92/100"  
        }  
        </example>  


        <example>  
        用户请求：帮我加20092？  
        意图：  
        {  
            "intention": "加油意图",  
            "reason": "用户询问加200元的92号汽油"，
            "Remark":"92/200"  
        }  
        </example>  

        <example>  
        用户请求：帮我加10095？  
        意图：  
        {  
            "intention": "加油意图",  
            "reason": "用户询问加100元的95号汽油"，
            "Remark":"95/100"  
        }  
        </example>  

        <example>  
        用户请求：帮我加92汽油  
        意图：  
        {  
            "intention": "加油意图",  
            "reason": "用户询问加92汽油"，
            "Remark":"92/0"  
        }  
        </example>  

        <example>  
        用户请求：帮我开发票  
        意图：  
        {  
            "intention": "开票意图",  
            "reason": "用户询问是否可以开票"，
            "Remark":"0/0"  
        }  
        </example>  

        <example>  
        用户请求：最近油站有什么优惠活动  
        意图：  
        {  
            "intention": "咨询意图",  
            "reason": "用户询问油站优惠活动"，
            "Remark":"0/0"  
        }  
        </example>  

        <example>  
        用户请求：加油报错误编码 51 532   
        意图：  
        {  
            "intention": "售后意图",  
            "reason": "用户询问加油机错误代码的含义与维修方案"，
            "Remark":"51/532"  
        }  
        </example> 


        用户请求：{{promt}}
        若无法明确判断，则选择 "咨询意图"，理由写 "输入不够明确，默认为咨询
        """;
        return new ChatHandle().ChatOllamaModel(promtStr, new ChatOptions()
        {
            Temperature = 0.1f,      // 低随机性，保证稳定输出
            TopP = 0.9f,             // 核采样
            MaxOutputTokens = 120    // 限制输出长度
        });
    }


    [HttpGet()]
    public async Task<ChatModelResponse> Demo(string promt)
    {
        //var promtStr = $$"""
        //你需要识别用户的加油意图，并根据用户请求分类为以下选项之一：
        //* 加油意图
        //* 发票意图
        //* 咨询意图
        //* 售后意图

        //当遇到92，95，98，0号，柴油需识别对应的油品，

        //请严格以如下 JSON 格式返回分析结果：
        //{
        //    "intention": "<加油意图/发票意图/咨询意图/售后意图>",
        //    "reason": "<简要说明识别理由>",
        //    "Remark":"<油品/金额>"
        //}

        //注意事项：  
        //1. 仅从用户请求中提取明确的意图，不提供额外信息或推测。  
        //2. 识别理由需简洁明了，直接引用或总结用户请求的关键词和语义。  

        //以下为示例：  

        //<example>  
        //用户请求：帮我加92，200元？  
        //意图：  
        //{  
        //    "intention": "加油意图",  
        //    "reason": "用户询问定量加油"，
        //    "Remark":"92/200"  
        //}  
        //</example>  

        //<example>  
        //用户请求：帮我加200  
        //意图：  
        //{  
        //    "intention": "加油意图",  
        //    "reason": "用户询问加200元"，
        //    "Remark":"0/200"  
        //}  
        //</example>  

        //<example>  
        //用户请求：帮我加1百92  
        //意图：  
        //{  
        //    "intention": "加油意图",  
        //    "reason": "用户询问加100元"，
        //    "Remark":"92/100"  
        //}  
        //</example>  


        //<example>  
        //用户请求：帮我加20092？  
        //意图：  
        //{  
        //    "intention": "加油意图",  
        //    "reason": "用户询问加200元的92号汽油"，
        //    "Remark":"92/200"  
        //}  
        //</example>  

        //<example>  
        //用户请求：帮我加10095？  
        //意图：  
        //{  
        //    "intention": "加油意图",  
        //    "reason": "用户询问加100元的95号汽油"，
        //    "Remark":"95/100"  
        //}  
        //</example>  

        //<example>  
        //用户请求：帮我加92汽油  
        //意图：  
        //{  
        //    "intention": "加油意图",  
        //    "reason": "用户询问加92汽油"，
        //    "Remark":"92/0"  
        //}  
        //</example>  

        //<example>  
        //用户请求：帮我开发票  
        //意图：  
        //{  
        //    "intention": "开票意图",  
        //    "reason": "用户询问是否可以开票"，
        //    "Remark":"0/0"  
        //}  
        //</example>  

        //<example>  
        //用户请求：最近油站有什么优惠活动  
        //意图：  
        //{  
        //    "intention": "咨询意图",  
        //    "reason": "用户询问油站优惠活动"，
        //    "Remark":"0/0"  
        //}  
        //</example>  

        //<example>  
        //用户请求：加油报错误编码 51 532   
        //意图：  
        //{  
        //    "intention": "售后意图",  
        //    "reason": "用户询问加油机错误代码的含义与维修方案"，
        //    "Remark":"51/532"  
        //}  
        //</example> 


        //用户请求：{{promt}}
        //若无法明确判断，则选择 "咨询意图"，理由写 "输入不够明确，默认为咨询
        //""";
        //return new ChatHandle().ChatOllamaModel(promtStr, new ChatOptions()
        //{
        //    Temperature = 0.1f,      // 低随机性，保证稳定输出
        //    TopP = 0.9f,             // 核采样
        //    MaxOutputTokens = 120    // 限制输出长度
        //});

        var funTool = new FunToolHandle();
        funTool.Demo();
        return new ChatModelResponse() { };
    }
}
