import{x as oe,u as ue,r as g,j as e}from"./vendor-react-BwKDLVNL.js";import{u as me,C as A}from"./city-autocomplete-Bvqen6Sn.js";import{C as de}from"./calculator-onboarding-VDqml9u9.js";import{w as m,W as v,Y as R,E as fe,F as ge,x as C,L as he,N as pe,aw as xe,aD as ye,ax as je,ay as ve,O as be,z as Ce,y as f,B as $,Z as Se,_ as Ne,$ as Te,a0 as we,a1 as Fe,aL as Le,V as ke}from"./index-4PWHNWf5.js";import"./vendor-dayjs-5tvLiZdS.js";import"./vendor-sentry-BncsBMgc.js";import{u as Ie}from"./vendor-i18n-C6wqqoou.js";import{B as De}from"./boxes-CwzwKHd4.js";import{T as Ae}from"./train-front-DgV5Ws9F.js";const P=[{value:"20 DC",labelKey:"calc.size.dc20light",label:"20DC лёгкая"},{value:"20 DC (24-28т)",labelKey:"calc.size.dc20heavy",label:"20DC тяжёлая (24-28т)"},{value:"40 HC",labelKey:"calc.size.hc40",label:"40 HC"}],_={FILO20:"20 DC",FILO20HC:"20 DC (24-28т)",FILO40:"40 HC"};function Me(s){const i=(s??"").trim();return i?P.some(u=>u.value===i)?i:_[i]?_[i]:"20 DC":"20 DC"}const Oe=5;function S(s){return s.split(",").map(i=>i.trim()).filter(Boolean)}function X(s,i){const u=i.trim();if(!u)return s;const a=S(s);return a.some(d=>d.toLowerCase()===u.toLowerCase())||a.length>=Oe?s:[...a,u].join(", ")}function G(s,i){return S(s).filter(u=>u!==i).join(", ")}function ze(s){const i=[];for(const u of(s??"").split(",")){const a=u.trim();if(!a)continue;const d=P.some(r=>r.value===a)?a:_[a];d&&!i.includes(d)&&i.push(d)}return i}const J=[{value:"any",label:"Любой тип"},{value:"tent",label:"Тент"},{value:"refrigerator",label:"Рефрижератор"},{value:"van",label:"Фургон"},{value:"container",label:"Контейнеровоз"},{value:"other",label:"Другое"}],Ee=[{value:"containers",label:"Контейнерные",status:"live",icon:xe},{value:"groupage",label:"Сборные",status:"live",icon:ye},{value:"ktk",label:"КТК",status:"live",icon:De},{value:"rail",label:"Ж/д",status:"live",icon:Ae},{value:"auto",label:"Авто-международные",status:"live",icon:je},{value:"air",label:"Авиа",status:"live",icon:ve}];function B(s){const i=new Date;return i.setDate(i.getDate()+s),i.toISOString().slice(0,10)}function He(s){if(!(s!=null&&s.trim()))return B(7);const i=s.trim();if(/^\d{4}-\d{2}-\d{2}$/.test(i))return i;const u=i.match(/^(\d{2})\.(\d{2})\.(\d{4})$/);return u?`${u[3]}-${u[2]}-${u[1]}`:B(7)}function Qe({className:s}){var Z;const[i]=oe(),u=ue(),{t:a,i18n:d}=Ie(),[r,n]=g.useState("containers"),[l,o]=g.useState(i.get("from")??""),[h,p]=g.useState(i.get("to")??""),[T,q]=g.useState(He(i.get("date"))),[w,ee]=g.useState(Me(i.get("size"))),[O,te]=g.useState(i.get("weight")??""),[z,ae]=g.useState(i.get("volume")??""),[F,ie]=g.useState(()=>{const t=i.get("carType");return t&&J.some(c=>c.value===t)?t:"any"}),[j,U]=g.useState(()=>{if(i.get("routeMode")==="multiple")return"multiple";const t=i.get("from")??"",c=i.get("to")??"";return t.includes(",")||c.includes(",")?"multiple":"single"}),[re,K]=g.useState(""),[se,V]=g.useState(""),[L,Y]=g.useState(()=>ze(i.get("size"))),k=r==="containers"&&j==="multiple";g.useEffect(()=>{const t=i.get("tab");t==="ktk"?n("ktk"):t==="intauto"||t==="auto"?n("auto"):t==="groupage"?n("groupage"):t==="containers"?n("containers"):t==="rail"?n("rail"):t==="air"?n("air"):(i.get("weight")||i.get("volume"))&&n("groupage")},[]);const le=((Z=d.language)==null?void 0:Z.split("-")[0])??"ru",Q=me({language:le}),I=Q,D=Q;g.useEffect(()=>{const t=i.get("from"),c=i.get("to");t&&t!==l&&o(t),c&&c!==h&&p(c)},[i]);const W=(()=>{if(!l.trim()||!h.trim()||!T)return!1;if(r==="groupage"||r==="air"){const t=parseFloat(O),c=parseFloat(z);return Number.isFinite(t)&&t>0||Number.isFinite(c)&&c>0}return r==="auto"?!0:k?L.length>0:!!w})();function ne(t){if(t.preventDefault(),!W)return;if(r==="auto"){const b=new URLSearchParams({cityFrom:M(l,I.data??[]),cityTo:M(h,D.data??[]),time:T,routeMode:"single",tab:"intauto"});F&&F!=="any"&&b.set("carType",F),u(`/search?${b.toString()}`);return}const c=r==="groupage"||r==="air"?"DYNAMIC":"CONTAINER",y=r==="containers"&&j==="multiple"?"multiple":"single",N=y==="multiple",x=new URLSearchParams({cityFrom:N?l.trim():M(l,I.data??[]),cityTo:N?h.trim():M(h,D.data??[]),time:T,pricingMode:c,routeMode:y});if(r==="groupage"||r==="air"){const b=parseFloat(O),H=parseFloat(z);Number.isFinite(b)&&b>0&&x.set("weight",String(b)),Number.isFinite(H)&&H>0&&x.set("volume",String(H))}else x.set("size",N&&L.length>0?L.join(","):w);r==="ktk"&&x.set("tab","ktk"),r==="rail"&&(x.set("tab","rail"),x.set("transportType","RAILWAY")),r==="air"&&(x.set("tab","air"),x.set("transportType","AIR")),u(`/search?${x.toString()}`)}function ce(t){n(t)}const E=e.jsxs(m,{gap:2,children:[e.jsx(v,{htmlFor:"date",hint:a("calc.form.dateHint","Желаемая дата готовности груза к отправке. Система подберёт ближайшие рейсы начиная с этой даты."),children:a("calc.form.dateLabel","Дата готовности")}),e.jsx(R,{id:"date",type:"date",value:T,onChange:t=>q(t.target.value),min:B(0),required:!0})]});return e.jsx(fe,{className:s,children:e.jsx(ge,{className:"pt-6",children:e.jsx("form",{onSubmit:ne,"aria-label":a("calc.form.ariaLabel","Калькулятор доставки"),children:e.jsxs(m,{gap:6,children:[e.jsx(C,{justify:"end",children:e.jsx(de,{autoOpen:!(i.get("from")||i.get("to"))})}),e.jsx(he,{value:r,onValueChange:t=>ce(t),children:e.jsx(pe,{className:"grid h-auto w-full grid-cols-2 gap-1.5 bg-bg-surface p-1.5 sm:grid-cols-3 lg:grid-cols-6",children:Ee.map(t=>{const c=t.icon,y=a(`calc.tabs.${t.value}`,t.label);return e.jsxs(be,{value:t.value,className:"flex h-auto min-h-[3.25rem] flex-col items-center justify-center gap-1.5 whitespace-normal rounded-md px-2 py-2.5 text-center text-[11px] font-medium leading-tight sm:text-xs",children:[e.jsx(c,{className:"h-4 w-4 shrink-0"}),e.jsx("span",{children:y}),t.status==="soon"&&e.jsx(Ce,{variant:"info",className:"px-1 py-0 text-[10px]",children:a("calc.tabs.soon","Скоро")})]},t.value)})})}),r==="containers"&&e.jsxs(C,{gap:3,align:"center",wrap:!0,children:[e.jsx(f,{variant:"caption",children:a("calc.route.label","Маршруты")}),e.jsxs(C,{gap:2,children:[e.jsx($,{type:"button",size:"sm",variant:j==="single"?"default":"outline",onClick:()=>U("single"),children:a("calc.route.single","Один маршрут")}),e.jsx($,{type:"button",size:"sm",variant:j==="multiple"?"default":"outline",onClick:()=>{U("multiple"),Y(t=>t.length?t:[w])},children:a("calc.route.multiple","Несколько")})]})]}),e.jsxs(m,{gap:4,children:[e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsxs(m,{gap:2,children:[e.jsx(v,{htmlFor:"cityFrom",hint:a("calc.form.cityFromHint","Город или порт отправления. Вводите название — появятся подсказки. Можно по-русски или латиницей: «Шанхай» или «Shanghai»."),children:a("calc.form.cityFromLabel","Город отправления")}),j==="multiple"?e.jsxs(m,{gap:2,children:[e.jsx(A,{id:"cityFrom",placeholder:a("calc.placeholder.cityFromMulti","Добавьте город — Шанхай, Нинбо…"),value:re,onChange:K,onSelect:t=>{o(c=>X(c,t)),K("")},preloadedOptions:I.data,"aria-describedby":"multi-route-hint"}),S(l).length>0&&e.jsx(C,{gap:1,wrap:!0,children:S(l).map(t=>e.jsxs("button",{type:"button",onClick:()=>o(c=>G(c,t)),className:"inline-flex items-center gap-1 rounded-full bg-bg-surface px-2.5 py-1 text-xs text-text transition-colors hover:text-primary","aria-label":a("calc.route.removeCity","Убрать {{city}}",{city:t}),children:[t,e.jsx("span",{"aria-hidden":!0,className:"text-text-muted",children:"×"})]},t))})]}):e.jsx(A,{id:"cityFrom",placeholder:a("calc.form.cityFromLabel","Город отправления"),value:l,onChange:o,required:!0,preloadedOptions:I.data})]}),e.jsxs(m,{gap:2,children:[e.jsx(v,{htmlFor:"cityTo",hint:a("calc.form.cityToHint","Город или порт, куда нужно доставить груз. Вводите название и выбирайте вариант из списка."),children:a("calc.form.cityToLabel","Город назначения")}),j==="multiple"?e.jsxs(m,{gap:2,children:[e.jsx(A,{id:"cityTo",placeholder:a("calc.placeholder.cityToMulti","Добавьте город — Москва, СПб…"),value:se,onChange:V,onSelect:t=>{p(c=>X(c,t)),V("")},preloadedOptions:D.data,"aria-describedby":"multi-route-hint"}),S(h).length>0&&e.jsx(C,{gap:1,wrap:!0,children:S(h).map(t=>e.jsxs("button",{type:"button",onClick:()=>p(c=>G(c,t)),className:"inline-flex items-center gap-1 rounded-full bg-bg-surface px-2.5 py-1 text-xs text-text transition-colors hover:text-primary","aria-label":a("calc.route.removeCity","Убрать {{city}}",{city:t}),children:[t,e.jsx("span",{"aria-hidden":!0,className:"text-text-muted",children:"×"})]},t))})]}):e.jsx(A,{id:"cityTo",placeholder:a("calc.form.cityToLabel","Город назначения"),value:h,onChange:p,required:!0,preloadedOptions:D.data})]})]}),r==="groupage"||r==="air"?e.jsxs("div",{className:"grid gap-4 sm:grid-cols-3",children:[e.jsxs(m,{gap:2,children:[e.jsx(v,{htmlFor:"weight",hint:a("calc.form.weightHint","Общий вес сборного груза в килограммах. Достаточно заполнить вес и/или объём — хотя бы одно из двух полей."),children:a("calc.form.weightLabel","Вес, кг")}),e.jsx(R,{id:"weight",type:"number",min:0,step:1,inputMode:"decimal",placeholder:a("calc.placeholder.weight","например 500"),value:O,onChange:t=>te(t.target.value),"aria-describedby":"lcl-hint"})]}),e.jsxs(m,{gap:2,children:[e.jsx(v,{htmlFor:"volume",hint:a("calc.form.volumeHint","Общий объём сборного груза в кубометрах (м³). Достаточно заполнить объём и/или вес."),children:a("calc.form.volumeLabel","Объём, м³")}),e.jsx(R,{id:"volume",type:"number",min:0,step:.1,inputMode:"decimal",placeholder:a("calc.placeholder.volume","например 2.5"),value:z,onChange:t=>ae(t.target.value),"aria-describedby":"lcl-hint"})]}),E]}):r==="auto"?e.jsxs("div",{className:"grid gap-4 sm:grid-cols-2",children:[e.jsxs(m,{gap:2,children:[e.jsx(v,{htmlFor:"carType",hint:a("calc.form.carTypeHint","Тип кузова: «Тент» — обычные грузы, «Рефрижератор» — груз с температурным режимом, «Контейнеровоз» — перевозка контейнера."),children:a("calc.form.carTypeLabel","Тип авто")}),e.jsxs(Se,{value:F,onValueChange:t=>{t&&ie(t)},children:[e.jsx(Ne,{id:"carType",children:e.jsx(Te,{})}),e.jsx(we,{children:J.map(t=>e.jsx(Fe,{value:t.value,children:a(`calc.carType.${t.value}`,t.label)},t.value))})]})]}),E]}):e.jsxs(m,{gap:4,children:[e.jsxs(m,{gap:2,children:[e.jsx(v,{hint:a("calc.size.hint","20DC — стандартный 20-футовый, 40HC — увеличенный 40-футовый, 20DC тяжёлая (24-28т) — усиленный под тяжёлый груз."),children:a("calc.form.containerTypeLabel","Тип контейнера")}),e.jsx("div",{className:"grid grid-cols-1 gap-1 rounded-lg bg-bg-surface p-1 sm:grid-cols-3",children:P.map(t=>{const c=k?L.includes(t.value):w===t.value;return e.jsx("button",{type:"button","aria-pressed":k?c:void 0,onClick:()=>k?Y(y=>y.includes(t.value)?y.filter(N=>N!==t.value):[...y,t.value]):ee(t.value),className:`rounded-md px-3 py-2.5 text-xs font-medium transition-all ${c?"bg-bg-base text-primary shadow-sm":"text-text-muted hover:text-text"}`,children:a(t.labelKey,t.label)},t.value)})})]}),e.jsx("div",{className:"sm:max-w-xs",children:E})]})]}),(r==="groupage"||r==="air")&&e.jsx(f,{variant:"muted",className:"text-sm",id:"lcl-hint",children:a("calc.hints.lcl","Укажите вес или объём (или оба). Бэкенд подберёт стоимость по dimensional weight (1 м³ ≈ 167 кг).")}),r==="containers"&&j==="multiple"&&e.jsx(f,{variant:"muted",className:"text-sm",id:"multi-route-hint",children:a("calc.hints.multiRoute","Добавьте несколько городов отправления/назначения из списка и отметьте несколько типов контейнеров — рассчитаем стоимость на каждую комбинацию маршрут × контейнер.")}),e.jsxs(C,{gap:4,justify:"between",wrap:!0,align:"center",children:[r==="groupage"?e.jsxs(m,{gap:1,children:[e.jsx(f,{variant:"caption",children:a("calc.tariff.label","Тариф")}),e.jsx(f,{className:"text-sm",children:a("calc.tariff.groupage","Сборный (LCL) — рассчитывается per kg/m³")})]}):r==="ktk"?e.jsxs(m,{gap:1,children:[e.jsx(f,{variant:"caption",children:a("calc.tariff.label","Тариф")}),e.jsx(f,{className:"text-sm",children:a("calc.tariff.ktk","КТК (SOC аренда) — фиксированная ставка за контейнер")})]}):r==="auto"?e.jsxs(m,{gap:1,children:[e.jsx(f,{variant:"caption",children:a("calc.tariff.label","Тариф")}),e.jsx(f,{className:"text-sm",children:a("calc.tariff.auto","Международное авто — прямая ставка за рейс (Турция/Иран/Европа)")})]}):r==="rail"?e.jsxs(m,{gap:1,children:[e.jsx(f,{variant:"caption",children:a("calc.tariff.label","Тариф")}),e.jsx(f,{className:"text-sm",children:a("calc.tariff.rail","Ж/д — ставка за контейнер по железной дороге")})]}):r==="air"?e.jsxs(m,{gap:1,children:[e.jsx(f,{variant:"caption",children:a("calc.tariff.label","Тариф")}),e.jsx(f,{className:"text-sm",children:a("calc.tariff.air","Авиа — ставка по расчётному весу (1 м³ ≈ 167 кг)")})]}):e.jsxs(m,{gap:1,children:[e.jsx(f,{variant:"caption",children:a("calc.tariff.label","Тариф")}),e.jsx(f,{className:"text-sm",children:a("calc.tariff.containers","Контейнерный (FCL) — ставка за контейнер")})]}),e.jsxs($,{type:"submit",size:"lg",disabled:!W,className:"w-full md:w-auto",children:[e.jsx(Le,{className:"h-4 w-4"}),a("calc.cta.search","Найти варианты"),e.jsx(ke,{className:"h-4 w-4"})]})]})]})})})})}function M(s,i){const u=a=>{var n,l;const d=a.trim();if(!d)return d;const r=d.toLowerCase();for(const o of i){const h=[];if(Array.isArray(o.name))for(const p of o.name)typeof p=="string"&&p.trim()&&h.push(p.trim());else typeof o.name=="string"&&o.name.trim()&&h.push(o.name.trim());if((n=o.originalName)!=null&&n.trim()&&h.push(o.originalName.trim()),h.some(p=>p.toLowerCase()===r))return((l=o.originalName)==null?void 0:l.trim())||d}return d};return s.includes(",")?s.split(",").map(u).filter(a=>a.length>0).join(","):u(s)}function We(s,i){var d,r;if(!(i!=null&&i.trim())){const n=new Set;for(const l of s){if(Array.isArray(l.name))for(const o of l.name)typeof o=="string"&&o.trim()&&n.add(o.trim());else typeof l.name=="string"&&l.name.trim()&&n.add(l.name.trim());(d=l.originalName)!=null&&d.trim()&&n.add(l.originalName.trim())}return Array.from(n).slice(0,50)}const u=i.trim().toLowerCase(),a=[];for(const n of s){const l=[];if(Array.isArray(n.name))for(const o of n.name)typeof o=="string"&&o.trim()&&l.push(o.trim());else typeof n.name=="string"&&n.name.trim()&&l.push(n.name.trim());(r=n.originalName)!=null&&r.trim()&&!l.includes(n.originalName.trim())&&l.push(n.originalName.trim()),l.some(o=>o.toLowerCase().includes(u))&&a.push(...l)}return a.slice(0,50)}export{Qe as C,We as c,M as r};