"use strict";(()=>{var a={};a.id=2548,a.ids=[2548],a.modules={20399:a=>{a.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:a=>{a.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},27189:(a,n,e)=>{e.r(n),e.d(n,{originalPathname:()=>$,patchFetch:()=>v,requestAsyncStorage:()=>w,routeModule:()=>c,serverHooks:()=>P,staticGenerationAsyncStorage:()=>K});var t={};e.r(t),e.d(t,{GET:()=>y,POST:()=>f});var r=e(49303),s=e(88716),i=e(60670),o=e(87070);function m(a,n){return Math.pow(a,n)*Math.exp(-a)/function a(n){return 0===n||1===n?1:n*a(n-1)}(n)}function l(a,n,e=4){let t=[];for(let r=0;r<=e;r++)for(let s=0;s<=e;s++){let e=m(a,r)*m(n,s);t.push({score:`${r}-${s}`,probability:e})}t.sort((a,n)=>n.probability-a.probability);let r=t.reduce((a,n)=>a+n.probability,0);return t.map(a=>({score:a.score,probability:Math.round(a.probability/r*100)}))}function g(a,n){let e=0,t=0,r=0;for(let s=0;s<=6;s++)for(let i=0;i<=6;i++){let o=m(a,s)*m(n,i);s>i?e+=o:s<i?r+=o:t+=o}let s=e+t+r;return{homeWin:Math.round(e/s*100),draw:Math.round(t/s*100),awayWin:Math.round(r/s*100)}}function d(a,n){let e=Math.round(10*a)/10,t=Math.round(10*n)/10;return{homeXG:e,awayXG:t,totalXG:Math.round((e+t)*10)/10,bttsProb:Math.round((1-Math.exp(-e))*(1-Math.exp(-t))*100)}}function h(a,n,e,t){let{homeXG:r,awayXG:s,totalXG:i,bttsProb:o}=d(e,t),{homeWin:m,draw:h,awayWin:u}=g(e,t),k=l(e,t).slice(0,3),M=[];return m>Math.max(h,u)?M.push(`Model memprediksi ${a} sebagai favorit dengan ${m}% peluang menang`):u>Math.max(m,h)?M.push(`Model memprediksi ${n} sebagai favorit dengan ${u}% peluang menang`):M.push(`Model memprediksi pertandingan ketat dengan ${h}% peluang seri`),i>3?M.push(`Ekspektasi gol tinggi (${i} xG) mengindikasikan pertandingan terbuka`):i<2&&M.push(`Ekspektasi gol rendah (${i} xG) mengindikasikan pertandingan ketat`),o>65&&M.push(`Peluang kedua tim cetak gol tinggi (${o}%) berdasarkan data historis`),M.push(`Skor paling mungkin: ${k.map(a=>a.score).join(", ")} (${k[0].probability}% untuk ${k[0].score})`),M}let u=process.env.OPENAI_API_KEY||"",k=new Map;async function M(a){let n=`Kamu adalah analis sepak bola profesional yang memberikan wawasan pertandingan untuk platform prediksi olahraga.

Analisis pertandingan berikut:
- Pertandingan: ${a.kandang} vs ${a.tandang}
- Liga: ${a.liga}
- Tanggal: ${a.tanggal}

Berikan analisis dalam format JSON berikut (HANYA JSON, tanpa teks lain):
{
  "pemenangPrediksi": "${a.kandang} atau ${a.tandang} atau Seri",
  "akurasiAI": angka antara 60-85 (persentase kepercayaan AI),
  "probabilitasKandang": angka 0-100,
  "probabilitasSeri": angka 0-100,
  "probabilitasTandang": angka 0-100,
  "prediksiSkor": "contoh: 2-1",
  "analisisSingkat": "2-3 kalimat analisis dalam Bahasa Indonesia, fokus pada performa tim, taktik, dan kondisi terkini. JANGAN sebut taruhan/judi/odds.",
  "wawasanKunci": [
    "wawasan 1 dalam Bahasa Indonesia",
    "wawasan 2 dalam Bahasa Indonesia",
    "wawasan 3 dalam Bahasa Indonesia"
  ],
  "dataHistoris": {
    "pertemuanTerakhir": "ringkasan 3-5 pertemuan terakhir",
    "formKandang": "form 5 pertandingan terakhir kandang (contoh: M-M-S-K-M)",
    "formTandang": "form 5 pertandingan terakhir tandang"
  },
  "disclaimer": "Analisis ini hanya untuk tujuan informasi dan hiburan. Bukan saran finansial atau investasi."
}

PENTING:
- Probabilitas kandang + seri + tandang HARUS berjumlah 100
- Gunakan Bahasa Indonesia
- JANGAN sebut taruhan, judi, odds, atau aktivitas keuangan
- Fokus pada analisis olahraga murni`,e=await fetch("https://api.openai.com/v1/chat/completions",{method:"POST",headers:{Authorization:`Bearer ${u}`,"Content-Type":"application/json"},body:JSON.stringify({model:"gpt-3.5-turbo",messages:[{role:"system",content:"Kamu adalah analis sepak bola yang memberikan wawasan olahraga. Selalu respond dengan JSON valid. Jangan pernah menyebut taruhan, judi, atau odds."},{role:"user",content:n}],temperature:0,max_tokens:800})});if(!e.ok){let a=await e.text();throw Error(`OpenAI API error: ${e.status} - ${a}`)}let t=await e.json(),r=(t.choices[0]?.message?.content||"").match(/\{[\s\S]*\}/);if(!r)throw Error("Format response AI tidak valid");let s=JSON.parse(r[0]),i=(s.probabilitasKandang||0)+(s.probabilitasSeri||0)+(s.probabilitasTandang||0);if(Math.abs(i-100)>5){let a=100/i;s.probabilitasKandang=Math.round(s.probabilitasKandang*a),s.probabilitasSeri=Math.round(s.probabilitasSeri*a),s.probabilitasTandang=100-s.probabilitasKandang-s.probabilitasSeri}if(void 0!==a.homeAvgGoals&&void 0!==a.awayAvgGoals){let n=g(a.homeAvgGoals,a.awayAvgGoals),e=l(a.homeAvgGoals,a.awayAvgGoals),t=d(a.homeAvgGoals,a.awayAvgGoals),r=h(a.kandang,a.tandang,a.homeAvgGoals,a.awayAvgGoals),i=e.slice(0,5).map(a=>{let[n,e]=a.score.split("-").map(Number);return{skor:a.score,prob:a.probability,tipe:n>e?"Kandang Menang":n<e?"Tandang Menang":"Seri"}});s.poissonModel={probabilitas:n,prediksiSkor:i,expectedGoals:t,wawasan:r}}let o=b.get(a.kandang)||{rank:10,form:"S-S-S-S-S",strength:75},m=b.get(a.tandang)||{rank:10,form:"S-S-S-S-S",strength:75},k=(o.form.match(/M/g)||[]).length,M=(m.form.match(/M/g)||[]).length,S=`${a.kandang}-${a.tandang}`,f=p.get(S),y=f?f.homeWins/5*100:50,c=f?f.awayWins/5*100:50,w=a.homeAvgGoals??1.5,K=a.awayAvgGoals??1.3,P=Math.min(100,Math.round(w/3*100)),$=Math.min(100,Math.round(K/3*100)),v=Math.min(100,Math.max(0,Math.round((1-K/3)*100))),A=Math.min(100,Math.max(0,Math.round((1-w/3)*100)));return s.spiderChart=a.homeStats&&a.awayStats&&a.statLabels?{homeStats:a.homeStats,awayStats:a.awayStats,labels:a.statLabels}:{homeStats:[o.strength,P,v,20*k,y,Math.max(0,100-5*o.rank)],awayStats:[m.strength,$,A,20*M,c,Math.max(0,100-5*m.rank)],labels:["Kekuatan","Serangan","Pertahanan","Form","H2H","Posisi"]},s.comparisonBars=[{label:"Kekuatan Tim",home:o.strength,away:m.strength},{label:"Potensi Serangan",home:P,away:$},{label:"Potensi Pertahanan",home:v,away:A},{label:"Form Terkini",home:20*k,away:20*M},{label:"Kekuatan H2H",home:Math.round(y),away:Math.round(c)},{label:"Menang Pertandingan",home:s.probabilitasKandang,away:s.probabilitasTandang}],s}let p=new Map([["Persib Bandung-PSM Makassar",{lastFive:"M-S-K-M-S",homeWins:2,awayWins:1,draws:2,summary:"Persib menang 2 kali, PSM menang 1 kali, 2 kali seri dalam 5 pertemuan terakhir"}],["Persija Jakarta-Persib Bandung",{lastFive:"S-M-K-M-S",homeWins:2,awayWins:2,draws:1,summary:"Persija menang 2 kali, Persib menang 2 kali, 1 kali seri dalam 5 pertemuan terakhir"}],["Persib Bandung-Persebaya",{lastFive:"M-S-M-K-S",homeWins:2,awayWins:1,draws:2,summary:"Persib menang 2 kali, Persebaya menang 1 kali, 2 kali seri dalam 5 pertemuan terakhir"}],["Persik Kediri-Bhayangkara FC",{lastFive:"M-K-S-M-S",homeWins:2,awayWins:1,draws:2,summary:"Persik menang 2 kali, Bhayangkara menang 1 kali, 2 kali seri dalam 5 pertemuan terakhir"}],["PSIS-Madura United",{lastFive:"K-S-M-S-K",homeWins:1,awayWins:2,draws:2,summary:"PSIS menang 1 kali, Madura United menang 2 kali, 2 kali seri dalam 5 pertemuan terakhir"}],["Dewa United-Borneo FC",{lastFive:"S-K-M-S-M",homeWins:1,awayWins:2,draws:2,summary:"Dewa United menang 1 kali, Borneo FC menang 2 kali, 2 kali seri dalam 5 pertemuan terakhir"}],["Persib Bandung-Bali United",{lastFive:"M-M-S-K-M",homeWins:3,awayWins:1,draws:1,summary:"Persib menang 3 kali, Bali United menang 1 kali, 1 kali seri dalam 5 pertemuan terakhir"}],["PSM Makassar-Persija Jakarta",{lastFive:"S-M-M-K-M",homeWins:3,awayWins:1,draws:1,summary:"PSM menang 3 kali, Persija menang 1 kali, 1 kali seri dalam 5 pertemuan terakhir"}]]),b=new Map([["Persik Kediri",{rank:8,form:"M-S-K-M-M",strength:76}],["Bhayangkara FC",{rank:12,form:"K-S-K-M-K",strength:72}],["Persija Jakarta",{rank:3,form:"M-M-S-M-K",strength:82}],["PSM Makassar",{rank:2,form:"M-M-K-M-S",strength:83}],["Persib Bandung",{rank:1,form:"M-M-M-S-M",strength:84}],["Bali United",{rank:4,form:"M-S-M-M-K",strength:81}],["Arema FC",{rank:6,form:"S-M-K-M-M",strength:78}],["Persebaya",{rank:5,form:"M-K-M-M-S",strength:79}],["Borneo FC",{rank:7,form:"M-S-K-M-M",strength:77}],["Dewa United",{rank:9,form:"K-M-S-M-K",strength:75}],["PSIS",{rank:10,form:"S-K-M-S-K",strength:74}],["Madura United",{rank:11,form:"K-M-S-K-M",strength:73}],["Arsenal",{rank:1,form:"M-M-M-S-M",strength:85}],["Manchester City",{rank:2,form:"M-M-M-M-K",strength:88}],["Liverpool",{rank:3,form:"M-S-M-M-M",strength:84}],["Aston Villa",{rank:4,form:"M-K-M-M-S",strength:80}],["Tottenham",{rank:5,form:"K-M-M-S-M",strength:82}],["Manchester United",{rank:6,form:"S-K-M-M-M",strength:81}],["Brighton",{rank:7,form:"M-M-K-S-M",strength:79}],["Chelsea",{rank:8,form:"M-S-K-M-M",strength:80}],["Real Madrid",{rank:1,form:"M-M-M-S-M",strength:87}],["Barcelona",{rank:2,form:"M-S-M-M-K",strength:85}],["Atletico Madrid",{rank:3,form:"M-M-K-M-S",strength:83}],["Bayern Munich",{rank:1,form:"M-M-M-M-S",strength:86}],["Dortmund",{rank:2,form:"M-S-M-K-M",strength:82}],["Inter",{rank:1,form:"M-M-S-M-M",strength:84}],["Milan",{rank:2,form:"S-M-M-K-M",strength:82}],["Juventus",{rank:3,form:"M-K-M-M-S",strength:81}]]);function S(a){let n=function(a,n){let e=b.get(a)||{rank:15,form:"S-S-K-S-S",strength:68},t=b.get(n)||{rank:15,form:"S-S-K-S-S",strength:68},r=e.strength,s=t.strength;r+=7;let i=a=>a.split("-").reduce((a,n)=>"M"===n?a+3:"K"===n?a-2:a,0),o=i(e.form),m=i(t.form);r+=1.5*o,s+=1.5*m,r+=(10-e.rank)*.5,s+=(10-t.rank)*.5;let l=(r=Math.max(50,r))+(s=Math.max(50,s)),g=r/l*100,d=s/l*100,h=Math.max(10,Math.min(28,28-.4*Math.abs(r-s))),u=100-h;g=g/100*u,d=d/100*u;let k=Math.round(g),M=Math.round(h);return{home:Math.max(5,k),draw:Math.max(5,M),away:Math.max(5,100-k-M)}}(a.kandang,a.tandang),e=b.get(a.kandang)||{rank:10,form:"S-S-S-S-S",strength:75},t=b.get(a.tandang)||{rank:10,form:"S-S-S-S-S",strength:75},r=function(a,n){let e=a+n;return`${Math.round(a/e*5)}-${Math.round(n/e*5)}`}(n.home,n.away),s=n.home>n.away?a.kandang:n.away>n.home?a.tandang:"Seri",i=`${a.kandang}-${a.tandang}`,o=p.get(i),m=(e.form.match(/M/g)||[]).length,u=(t.form.match(/M/g)||[]).length,k=[];m>3?k.push(`${a.kandang} sedang dalam performa bagus dengan ${m} kemenangan dalam 5 pertandingan terakhir.`):m<2&&k.push(`${a.kandang} sedang mencari konsistensi dengan hanya ${m} kemenangan dalam 5 laga terakhir.`),u>3?k.push(`${a.tandang} menunjukkan konsistensi dengan ${u} kemenangan dalam 5 pertandingan terakhir.`):u<2&&k.push(`${a.tandang} perlu meningkatkan performa setelah hanya meraih ${u} kemenangan dalam 5 laga terakhir.`);let M=Math.abs(e.rank-t.rank);M>5?k.push(`Terdapat perbedaan peringkat yang signifikan (${M} posisi) antara kedua tim.`):M<=2&&k.push(`Kedua tim bersaing ketat di klasemen dengan selisih hanya ${M} peringkat.`),o&&k.push(`Dalam 5 pertemuan terakhir, ${o.summary}.`),m>=u?k.push(`Faktor kandang dan momentum positif bisa menjadi keunggulan ${a.kandang}.`):k.push(`${a.tandang} berpeluang memanfaatkan momentum positif meski bermain di kandang lawan.`);let S=Math.round([b.has(a.kandang)?20:0,b.has(a.tandang)?20:0,Math.min(20,4*m),Math.min(20,4*u),20].reduce((a,n)=>a+n,0)),f=a=>a>=85?2.1:a>=80?1.8:a>=75?1.5:a>=70?1.3:1,y=a.homeAvgGoals??1.1*f(e.strength),c=a.awayAvgGoals??f(t.strength),w=g(y,c),K=l(y,c),P=d(y,c),$=h(a.kandang,a.tandang,y,c),v=K.slice(0,5).map(a=>{let[n,e]=a.score.split("-").map(Number);return{skor:a.score,prob:a.probability,tipe:n>e?"Kandang Menang":n<e?"Tandang Menang":"Seri"}}),A=(e.form.match(/M/g)||[]).length,x=(t.form.match(/M/g)||[]).length,j=o?o.homeWins/5*100:50,B=o?o.awayWins/5*100:50,G=Math.min(100,Math.round(y/3*100)),N=Math.min(100,Math.round(c/3*100)),T=Math.min(100,Math.max(0,Math.round((1-c/3)*100))),W=Math.min(100,Math.max(0,Math.round((1-y/3)*100))),F=a.homeStats&&a.awayStats&&a.statLabels?{homeStats:a.homeStats,awayStats:a.awayStats,labels:a.statLabels}:{homeStats:[e.strength,G,T,20*A,j,Math.max(0,100-5*e.rank)],awayStats:[t.strength,N,W,20*x,B,Math.max(0,100-5*t.rank)],labels:["Kekuatan","Serangan","Pertahanan","Form","H2H","Posisi"]},I=[{label:"Kekuatan Tim",home:e.strength,away:t.strength},{label:"Potensi Serangan",home:G,away:N},{label:"Potensi Pertahanan",home:T,away:W},{label:"Poisson Distribution",home:w.homeWin,away:w.awayWin},{label:"Kekuatan H2H",home:Math.round(j),away:Math.round(B)},{label:"Form Terkini",home:20*A,away:20*x},{label:"Menang Pertandingan",home:n.home,away:n.away}];return{pemenangPrediksi:s,akurasiAI:S,probabilitasKandang:n.home,probabilitasSeri:n.draw,probabilitasTandang:n.away,prediksiSkor:r,analisisSingkat:k.join(" "),wawasanKunci:[`${a.kandang} ${e.form.includes("M")?"menunjukkan":"perlu meningkatkan"} konsistensi performa (${e.form})`,`${a.tandang} ${t.form.includes("M")?"memiliki":"sedang mencari"} momentum positif (${t.form})`,`Statistik menunjukkan pertandingan akan ${n.draw>30?"ketat":"terbuka"} dengan peluang gol ${r.split("-").reduce((a,n)=>Number(a)+Number(n),0)>2?"tinggi":"normal"}`],dataHistoris:{pertemuanTerakhir:o?o.summary:`${a.kandang} dan ${a.tandang} memiliki rekor pertemuan yang seimbang`,formKandang:e.form,formTandang:t.form},disclaimer:"Analisis ini hanya untuk tujuan informasi dan hiburan. Bukan saran finansial atau investasi.",provider:"rule_based",poissonModel:{probabilitas:w,prediksiSkor:v,expectedGoals:P,wawasan:$},spiderChart:F,comparisonBars:I}}async function f(a){try{let n;let e=await a.json(),{matchId:t,kandang:r,tandang:s,liga:i,tanggal:m}=e;if(!t||!r||!s)return o.NextResponse.json({sukses:!1,pesan:"Data pertandingan tidak lengkap"},{status:400});let l="true"===a.headers.get("x-clear-cache"),g="true"===a.headers.get("x-force-rule-based");l&&(k.clear(),console.log("Cache cleared by request"));let d=!l&&k.get(t);if(d&&Date.now()-d.waktu<864e5)return o.NextResponse.json({sukses:!0,data:d.data,dariCache:!0});let h="openai";if(g||!u)n=S(e),h="rule_based";else try{n=await M(e)}catch(a){console.error("OpenAI error, menggunakan fallback:",a),n=S(e),h="rule_based"}let p={...n,provider:h,dibuatPada:new Date().toISOString()};return k.set(t,{data:p,waktu:Date.now()}),o.NextResponse.json({sukses:!0,data:p,dariCache:!1})}catch(a){return console.error("AI Analysis error:",a),o.NextResponse.json({sukses:!1,pesan:"Gagal menghasilkan analisis AI"},{status:500})}}async function y(a){let{searchParams:n}=new URL(a.url),e=n.get("matchId");if(!e)return o.NextResponse.json({sukses:!1,pesan:"matchId diperlukan"},{status:400});let t=k.get(e);return t?o.NextResponse.json({sukses:!0,data:t.data,dariCache:!0}):o.NextResponse.json({sukses:!1,pesan:"Analisis belum tersedia"},{status:404})}let c=new r.AppRouteRouteModule({definition:{kind:s.x.APP_ROUTE,page:"/api/ai-analysis/route",pathname:"/api/ai-analysis",filename:"route",bundlePath:"app/api/ai-analysis/route"},resolvedPagePath:"C:\\xampp\\htdocs\\Bolafest\\app\\api\\ai-analysis\\route.ts",nextConfigOutput:"standalone",userland:t}),{requestAsyncStorage:w,staticGenerationAsyncStorage:K,serverHooks:P}=c,$="/api/ai-analysis/route";function v(){return(0,i.patchFetch)({serverHooks:P,staticGenerationAsyncStorage:K})}}};var n=require("../../../webpack-runtime.js");n.C(a);var e=a=>n(n.s=a),t=n.X(0,[9276,5972],()=>e(27189));module.exports=t})();