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