'use client';
import {useState} from 'react';
import {MapEditor} from './map-editor';
import {DEFAULT_CONTENT,type Content} from '../lib/content';
import {makeShip} from '../lib/engine';
import {ShipArt} from './game';
const labels:Record<string,string>={crew:'Uzman mürettebat',speedBonus:'Hız katkısı',reloadBonus:'Doldurma süresi indirimi %',accuracyBonus:'İsabet katkısı %',repairBonus:'Tamir katkısı %',imageMode:'Yüklenen görsel türü',hullSkin:'Gövde tasarımı',spawns:'NPC doğma grupları',mastOffset:'Direk yerleşim kayması',sailScale:'Yelken ölçeği',cannonSpacing:'Top yerleşim aralığı',flagOffset:'Bayrak yüksekliği',deckHeight:'Güverte yüksekliği',fog:'Sis yoğunluğu',theme:'Ada atmosferi',weather:'Hava durumu',ammo:'Mühimmat',designs:'Kozmetik tasarımlar',levels:'Seviye tablosu',products:'Kampanya & paketler',events:'Etkinlik yönetimi',item:'Eşya kimliği',itemCount:'Eşya ödül adedi',quantity:'Paket adedi',limit:'Kişi başı sınır (0: yok)',discount:'İndirim %',abilityRadius:'Salvo yarıçapı',abilityWindup:'Salvo uyarısı (ms)',abilityPower:'Yenileme % / salvo temel hasar %',phaseThreshold:'Öfke evresi HP eşiği % (0: kapalı)',rageMultiplier:'Öfke hasar çarpanı',ability:'Boss yeteneği',abilityCooldown:'Yetenek aralığı (ms)',dropItem:'Nadir eşya kimliği',dropChance:'Düşme ihtimali %',collision:'Çarpışma yarıçapı',level:'Seviye',ships:'Gemi yönetimi',cannons:'Top yönetimi',sails:'Yelken yönetimi',maps:'Harita editörü',npcs:'NPC yönetimi',quests:'Görev yönetimi',rules:'Seviye & denge',flags:'Bayraklar',id:'Kimlik (benzersiz)',name:'Ad',description:'Açıklama',hp:'Can',speed:'Temel hız',capacity:'Top kapasitesi',crewCapacity:'Mürettebat kapasitesi',sailSlots:'Yelken yuvası',range:'Menzil',vision:'Görüş',minLevel:'Minimum seviye',price:'Fiyat',currency:'Para birimi',status:'Satış / yayın durumu',hullLength:'Gövde uzunluğu',hullWidth:'Gövde genişliği',masts:'Direk sayısı',scale:'Görünüm ölçeği',imageUrl:'Özel gemi görseli',damage:'Hasar',reload:'Doldurma süresi (ms)',accuracy:'İsabet %',critical:'Kritik %',bonus:'Hız bonusu',durability:'Dayanıklılık',gold:'Altın ödülü',xp:'XP ödülü',diamonds:'Elmas ödülü',count:'Adet / hedef',maxLevel:'Azami seviye',xpStep:'Seviye başına XP',gunnerPrice:'Topçu fiyatı (altın)',start:'Başlangıç (boş: sınırsız)',end:'Bitiş (boş: sınırsız)',stock:'Stok (-1: sınırsız)',portX:'Liman X',portY:'Liman Y',portRadius:'Güvenli liman yarıçapı',spawnX:'NPC doğma X',spawnY:'NPC doğma Y',links:'Bağlı harita kimlikleri (virgülle)',islands:'Adalar: x,y,yarıçapX,yarıçapY; …',npc:'NPC türü kimliği',respawn:'Yeniden doğma (sn)',aggression:'Davranış',requires:'Önceki görev kimliği',repeat:'Tekrar',kind:'Hedef türü',target:'Hedef kimliği (boş: tümü)',cargo:'Yük kapasitesi',repair:'Tamir kapasitesi',class:'Sınıf',upgradeCost:'Yükseltme bedeli',shield:'Kalkan',defense:'Savunma',model:'Gemi kimliği',pvp:'PvP açık',color:'Renk',sail:'Yelken rengi',hull:'Gövde rengi',shade:'Gölge rengi',accent:'Süsleme rengi',emblem:'Arma'};
const options:Record<string,string[]>={imageMode:['complete','hull'],hullSkin:['','albatros','poyraz','reis','eclipse','leviathan','sultan','merchant','frigate','dreadnought','storm','inferno','sovereign'],ability:['none','repair','shield','barrage'],theme:['tropical','sand','rock','ice'],weather:['clear','rain','storm'],currency:['gold','diamonds'],status:['sale','hidden','inactive'],aggression:['passive','aggressive'],repeat:['once','daily','weekly'],kind:['kills','crates','explore','level','gold','upgrade']};
export function ContentEditor({content,save,busy,initialGroup='ships'}:{initialGroup?:keyof Content;content:Content;save:(a:Record<string,unknown>)=>Promise<void>;busy:boolean}){
 const [group,setGroup]=useState<keyof Content>(initialGroup),[entry,setEntry]=useState<Record<string,unknown>>({...DEFAULT_CONTENT[initialGroup][0],...content[initialGroup][0]}),[error,setError]=useState('');
 const references:Record<string,{id:string;name:string}[]>={model:content.ships,npc:content.npcs,map:content.maps,requires:content.quests,item:[...content.cannons,...content.sails,...content.ammo],dropItem:[...content.cannons,...content.sails,...content.ammo]};
 const rows=content[group] as unknown as Record<string,unknown>[];const change=(k:string,v:unknown)=>setEntry(e=>({...e,[k]:v}));
 async function upload(file?:File){if(!file)return;if(!['image/png','image/webp'].includes(file.type)||file.size>300000){setError('PNG/WebP, en fazla 300 KB. Şeffaf zemin önerilir.');return;}const r=new FileReader();r.onload=()=>change('imageUrl',r.result);r.readAsDataURL(file);}
 return <><div className="content-tabs">{Object.keys(DEFAULT_CONTENT).map(k=><button className={k===group?'selected':''} key={k} onClick={()=>{setGroup(k as keyof Content);setEntry({...DEFAULT_CONTENT[k as keyof Content][0],...((content as unknown as Record<string,Record<string,unknown>[]>)[k][0])});}}>{labels[k]}</button>)}</div><section className="admin-section"><div className="section-top"><h2>{labels[group]}</h2><button className="gold-button" onClick={()=>setEntry({...DEFAULT_CONTENT[group][0],...rows[0],id:group+'-'+Date.now(),name:'Yeni tanım',status:'hidden'})}>+ Yeni oluştur</button></div><div className="editor-layout"><div className="definition-list">{rows.map(v=><button className={entry.id===v.id?'selected':''} key={String(v.id)} onClick={()=>setEntry({...DEFAULT_CONTENT[group][0],...v})}><strong>{String(v.name)}</strong><small>{String(v.id)} · {String(v.status??'aktif')}</small></button>)}</div><form onSubmit={e=>{e.preventDefault();void save({type:'content',target:group,value:entry});}}><p>Kaydettiğinde sunucuda kalıcılaşır. Silmek yerine pasif yaparak eski satın almaları koruyabilirsin.</p>{(group==='ships'||group==='designs')&&<div className="editor-ship"><ShipArt ship={{...makeShip('preview','Önizleme',Date.now()),model:String(entry.id),spec:entry as unknown as Content['ships'][number]}} large/></div>}{group==='maps'&&<MapEditor key={String(entry.id)} entry={entry} change={change}/>}<div className="form-grid editor-fields">{Object.entries(entry).filter(([k])=>!(group==='ships'&&k==='damage')).map(([k,v])=><label key={k}>{labels[k]??k}{k==='imageUrl'?<><input type="file" accept="image/png,image/webp" onChange={e=>void upload(e.target.files?.[0])}/>{!!v&&<button type="button" onClick={()=>change(k,'')}>Yüklenen görseli kaldır</button>}</>:['start','end'].includes(k)?<input type="datetime-local" value={Number(v)?new Date(Number(v)-new Date(Number(v)).getTimezoneOffset()*60000).toISOString().slice(0,16):''} onChange={e=>change(k,e.target.value?new Date(e.target.value).getTime():0)}/>:references[k]?<select value={String(v)} onChange={e=>change(k,e.target.value)}><option value="">Seçim yok</option>{references[k].map(o=><option value={o.id} key={o.id}>{o.name}</option>)}</select>:typeof v==='boolean'?<input type="checkbox" checked={v} onChange={e=>change(k,e.target.checked)}/>:options[k]?<select value={String(v)} onChange={e=>change(k,e.target.value)}>{options[k].map(o=><option key={o} value={o}>{({sale:'Satışta / yayında',hidden:'Gizli',inactive:'Pasif',gold:'Altın',diamonds:'Elmas',once:'Bir kez',daily:'Günlük',weekly:'Haftalık',passive:'Karşılık veren',aggressive:'Saldırgan',clear:'Açık',rain:'Yağmurlu',storm:'Fırtınalı',none:'Yok',complete:'Tam gemi görseli',hull:'Sadece gövde (hareketli yelkenli)',repair:'Kendini onarma',shield:'Kalkan yenileme'} as Record<string,string>)[o]??o}</option>)}</select>:<input type={typeof v==='number'?'number':'text'} step="any" value={String(v)} onChange={e=>change(k,typeof v==='number'?Number(e.target.value):e.target.value)}/>}</label>)}</div>{error&&<p role="alert">{error}</p>}<button disabled={busy} className="gold-button">{busy?'Kaydediliyor…':'Tanımı kaydet ve uygula'}</button></form></div></section></>;
}
