const data = {
    "WADR": {
        "name": "WADR", "nameLong": "Kampfdrohne", "hull": 120, "armor": 0, "shield": 0, "speed": 200, "agility": 200, "weaponList": {"GTGN": 1}
    },
    "LFGT": {
        "name": "LFGT", "nameLong": "Leichter Jäger", "hull": 1200, "armor": 0, "shield": 0, "speed": 250, "agility": 250, "weaponList": {"LACA": 2}
    },
    "HFGT": {
        "name": "HFGT", "nameLong": "Schwerer Jäger", "hull": 2400, "armor": 0, "shield": 0, "speed": 120, "agility": 110, "weaponList": {"HLCA": 2}
    },
    "SFGT": {
        "name": "SFGT", "nameLong": "Tarnkappenjäger", "hull": 1400, "armor": 0, "shield": 0, "speed": 124, "agility": 75, "stealth": 100, "weaponList": {"XLAC": 1}
    },
    "CORV": {
        "name": "CORV", "nameLong": "Korvette", "hull": 7000, "armor": 7, "shield": 14, "speed": 230, "agility": 85, "weaponList": {"MSLN": 30, "LACA": 2}
    },
    "MSFR": {
        "name": "MSFR", "nameLong": "Raketenfregatte", "hull": 16000, "armor": 20, "shield": 55, "speed": 130, "agility": 50, "weaponList": {"MSLN": 40, "HLCA": 5}
    },
    "DSTR": {
        "name": "DSTR", "nameLong": "Zerstörer", "hull": 32000, "armor": 80, "shield": 2, "speed": 100, "agility": 50, "weaponList": {"MSLN": 20, "PLCA": 5}
    },
    "ACRS": {
        "name": "ACRS", "nameLong": "Panzerkreuzer", "hull": 120000, "armor": 800, "shield": 400, "speed": 70, "agility": 23, "weaponList": {"MSLN": 20, "HLCA": 5, "IOCA": 5}
    },
    "DNGT": {
        "name": "DNGT", "nameLong": "Schlachtschiff", "hull": 240000, "armor": 100, "shield": 100, "speed": 70, "agility": 15, "weaponList": {"HLCA": 10, "IOCA": 10, "PLCA": 10, "PRCA": 1}
    },
    "GTGN": {
        "name": "GTGN", "shots": 1000, "range": 20, "attackGround": 0, "attackShip": 3, "effectArmor": 1, "effectShield": 0, "accuracy": 20,
        "prio": "AIDC,RSDR,RHDR,RKDR,LLSA,RIDR,HLSA,LLTU,PFGT,MSRM,SWMD,MSTU,HFGT,SFGT,ALCR,IBTR,RCYC,PRDR,PRCY,EXDR,SEDR,LFGT,RAFL,GTRN,LBTR,ARCY,LPRD,CCOL,RFLS,RTRN,MIVE,RRFV,STRN,SPST,RFVE,LEVE,PMIV,ASUD,PTRN,SBTR,LRCO,IXCW,EXCW,HFLS,GRCO,SWCO,ARCO,FCOL,SMSW,ATRN,ACRM,SWAD,WADR,AFLS,PLDC,STRT,SCOL,HTRN,FROR,HGBC,STNK,ASCS,CNSV,PTNK,SSCD,ATNK,ALTM,HTNK,ASED,ASCD,SUDR,SCDR,FLDP,PCOR,DISA,SHDU,SSDR,SPND,SPDR,GCTS,PLFG,GDFM,GBOM,GDBH,PBOM,PTSA,PTRM,SWPD,PTTU,RBCR,SWBS,GFGT,GDST,AMSA,SWTD,APTU,PLRM,PLSA,PLTU,FHML,GLRD,SWBD,RSPD,HLRM,HLTU,HMDU,DTST,BTST,SWSD,ABAT,SITU,SISA,FBCR,IORM,ASPD,DNGT,LAMN,MAMN,SAMN,IOSA,IOTU,DSTR,FLTU,FPTT,ABOM,RTTN,MSFR,APSA,RDFR,SWFG,AFGT,LFMN,MFMN,SFMN,SMDU,MSSA,ICOL,LMDU,FIOT,CORV,RLBO,LCMN,MCMN,SCMN,MMDU,SBOM,LNMN,ARDF,ARMS,HBOM,SWBO,ACRS,ALBO,LBOM,SWIS,ITRT,ICAR,ATRT,ACAR,GCOL,IFLS,SWFS,FCAR,RSCD,ASPM,PFLS,BFLS,AMIV,HTRT,WFLS,IACS,SCAR,LMSW,LTRT,ITRN,QFLS,LTRN,SFLS,PLFL,ICSV,LACS,LTNK,AACI,ITNK,ACIP"
    },
    "LACA": {
        "name": "LACA", "shots": 10, "range": 100, "attackGround": 0, "attackShip": 150, "effectArmor": 0.3, "effectShield": 0.01, "accuracy": 75,
        "prio": "AIDC,ACRM,RSDR,RHDR,RKDR,GCTS,GDFM,PTSA,GBOM,PLSA,RBCR,SWBS,HLSA,GFGT,SISA,IOSA,ABAT,PLRM,DNGT,PLTU,RIDR,FBCR,PFGT,HLRM,DSTR,HLTU,SMDU,MSFR,PLFG,BTST,MSSA,LLSA,PBOM,AFGT,HFGT,SWFG,ABOM,CORV,SBOM,RDFR,FLTU,MSRM,SFGT,SWMD,MSTU,LLTU,IORM,IOTU,RLBO,LCMN,MCMN,SCMN,SITU,HBOM,LFGT,IBTR,ALCR,SWBO,RCYC,PRCY,RAFL,LBOM,PRDR,ARCY,EXDR,SEDR,GTRN,LBTR,LFMN,MFMN,SFMN,LPRD,GCOL,CCOL,RFLS,ATRT,LNMN,RTRN,ACAR,SWFS,MIVE,STRN,RRFV,FCAR,PTRN,PMIV,LEVE,RFVE,ASUD,SBTR,HFLS,PFLS,LRCO,GRCO,EXCW,IXCW,SWCO,ARCO,FCOL,SWAD,WADR,IACS,SCAR,BFLS,WFLS,HTRT,SMSW,ATRN,LMSW,SPST,AFLS,PLDC,STRT,SCOL,QFLS,LTRN,FROR,AMIV,HTRN,STNK,SFLS,HGBC,PTNK,ICSV,CNSV,ASCS,LTRT,LACS,SSCD,ATNK,HTNK,ASED,ASCD,SUDR,SCDR,ALTM,FLDP,LTNK,SSDR,SPDR,PCOR,DISA,SHDU,SPND,RSPD,ASPD,SWSD,GDBH,PTRM,SWPD,PTTU,GDST,AMSA,SWTD,APTU,FHML,GLRD,SWBD,HMDU,DTST,LAMN,MAMN,SAMN,FPTT,RTTN,APSA,ICOL,LMDU,FIOT,MMDU,ARDF,ARMS,ACRS,ALBO,SWIS,ITRT,ICAR,IFLS,RSCD,ASPM,ITRN,PLFL,AACI,ITNK,ACIP"
    },
    "HLCA": {
        "name": "HLCA", "shots": 9, "range": 150, "attackGround": 0, "attackShip": 600, "effectArmor": 0.2, "effectShield": 0.01, "accuracy": 50,
        "prio": "AIDC,ACRM,PCOR,GCTS,GDFM,RSDR,PTSA,GDBH,GBOM,RHDR,GDST,RKDR,PLSA,RBCR,SWBS,PLFG,HLSA,GFGT,SISA,BTST,PBOM,ABAT,AMSA,IOSA,DNGT,DTST,SWTD,FBCR,SMDU,DSTR,PFGT,APSA,MSFR,ABOM,PLRM,PLTU,AFGT,MSSA,RIDR,LFMN,MFMN,SFMN,HFGT,LLSA,SWFG,HLRM,CORV,RLBO,SBOM,RDFR,HLTU,ICOL,PTRM,SWPD,PTTU,SFGT,FHML,FLTU,IORM,SITU,HBOM,IOTU,ACRS,SWBO,LCMN,MCMN,SCMN,MSRM,ALBO,SWMD,MSTU,LLTU,IBTR,ALCR,LFGT,RCYC,LBOM,PRCY,RAFL,ARCY,GTRN,LBTR,ACAR,GCOL,SWIS,LMDU,CCOL,RFLS,ATRT,ITRT,FCAR,SWFS,ICAR,FIOT,RTRN,LPRD,PRDR,EXDR,SEDR,MIVE,STRN,RRFV,ASPM,BFLS,IFLS,PTRN,LEVE,RFVE,PMIV,SBTR,HFLS,LRCO,AMIV,PFLS,IACS,GRCO,EXCW,IXCW,WFLS,SCAR,LMSW,SWCO,ARCO,FCOL,LNMN,SMSW,HTRT,ATRN,AFLS,LTRT,PLDC,STRT,LTRN,QFLS,ASUD,SWAD,WADR,SCOL,FROR,ITRN,HTRN,STNK,SFLS,ICSV,RSCD,HGBC,CNSV,ASCS,PTNK,SPST,LACS,ATNK,HTNK,ALTM,LTNK,FLDP,PLFL,SSCD,ITNK,ASED,ASCD,SUDR,SCDR,SSDR,SPDR,DISA,SHDU,SPND,RSPD,ASPD,SWSD,APTU,GLRD,SWBD,HMDU,LAMN,MAMN,SAMN,FPTT,RTTN,MMDU,ARDF,ARMS,AACI,ACIP"
    },
    "XLAC": {
        "name": "XLAC", "shots": 1, "range": 320, "attackGround": 0, "attackShip": 1500, "effectArmor": 0.3, "effectShield": 0.1, "accuracy": 10,
        "prio": "AIDC,ACRM,PCOR,GCTS,GDFM,PTSA,GDBH,GDST,PLSA,GBOM,RSDR,RBCR,SWBS,HLSA,SISA,DTST,BTST,ABAT,IOSA,RHDR,DNGT,PLFG,SMDU,GFGT,RKDR,APSA,AMSA,PBOM,SWTD,FBCR,DSTR,MSFR,ABOM,PFGT,MSSA,LLSA,AFGT,LFMN,MFMN,SFMN,RLBO,SBOM,HFGT,CORV,SWFG,RDFR,PLRM,SFGT,PLTU,HLRM,ACRS,HLTU,RIDR,IBTR,ARMS,ALCR,HBOM,ALBO,SWBO,RCYC,GTRN,LBTR,RAFL,PRCY,LCMN,MCMN,SCMN,ACAR,GCOL,MSRM,FLTU,LBOM,SWMD,MSTU,LLTU,LFGT,ARCY,CCOL,FCAR,RFLS,ASPM,MIVE,SWFS,RRFV,RTRN,STRN,ATRT,PRDR,LPRD,RFVE,LEVE,BFLS,PMIV,EXDR,SEDR,IORM,IOTU,IACS,SBTR,LRCO,AMIV,IXCW,EXCW,PTRN,HFLS,LMSW,SCAR,GRCO,WFLS,SMSW,ATRN,PFLS,SWCO,ARCO,FCOL,HTRT,LTRT,LTRN,AFLS,QFLS,PLDC,STRT,SCOL,HTRN,ICSV,HGBC,FROR,ASCS,STNK,LNMN,CNSV,SFLS,LACS,SWAD,WADR,PTNK,RSCD,ASUD,ALTM,ATNK,HTNK,LTNK,FLDP,SPST,PLFL,SSCD,ASED,ASCD,SUDR,SCDR,SSDR,SPDR,DISA,SHDU,SPND,RSPD,ASPD,SWSD,PTRM,SWPD,PTTU,APTU,FHML,GLRD,SWBD,HMDU,SITU,LAMN,MAMN,SAMN,FPTT,RTTN,ICOL,LMDU,FIOT,MMDU,ARDF,SWIS,ITRT,ICAR,IFLS,ITRN,AACI,ITNK,ACIP"
    },
    "MSLN": {
        "name": "MSLN", "shots": 50, "range": 100, "attackGround": 0, "attackShip": 40, "effectArmor": 1, "effectShield": 0, "accuracy": 200,
        "prio": "AIDC,ACRM,RSDR,RHDR,RKDR,RIDR,PLSA,HLSA,GFGT,PFGT,LLSA,MSSA,HFGT,SWFG,MSFR,AFGT,FBCR,SFGT,CORV,LCMN,MCMN,SCMN,LFGT,LNMN,IBTR,RCYC,ALCR,PRCY,PRDR,RAFL,EXDR,SEDR,ARCY,GTRN,LBTR,ASUD,LPRD,RFLS,CCOL,SPST,RTRN,ATRT,SWAD,WADR,STRN,MIVE,PTRN,RRFV,PMIV,LEVE,HFLS,RFVE,SBTR,GRCO,LRCO,SWCO,ARCO,FCOL,EXCW,IXCW,PLDC,SMSW,ATRN,AFLS,STRT,SCOL,SSCD,FROR,HTRT,HTRN,STNK,PTNK,ASED,ASCD,SUDR,SCDR,CNSV,HGBC,ASCS,ATNK,HTNK,ALTM,FLDP,SSDR,SPDR,PCOR,SPND,DISA,SHDU,RSPD,ASPD,SWSD,GCTS,PLFG,GDFM,GBOM,GDBH,PBOM,PTSA,PTRM,SWPD,PTTU,RBCR,SWBS,GDST,AMSA,SWTD,APTU,PLRM,PLTU,FHML,GLRD,SWBD,HLRM,HLTU,HMDU,DTST,BTST,ABAT,SITU,SISA,IORM,DNGT,LAMN,MAMN,SAMN,IOSA,IOTU,DSTR,FLTU,FPTT,ABOM,RTTN,APSA,RDFR,MSRM,LFMN,MFMN,SFMN,SMDU,SWMD,MSTU,LLTU,ICOL,LMDU,FIOT,RLBO,MMDU,SBOM,ARDF,ARMS,HBOM,SWBO,ACRS,ALBO,LBOM,SWIS,ITRT,ICAR,ACAR,GCOL,IFLS,SWFS,FCAR,RSCD,ASPM,PFLS,BFLS,AMIV,WFLS,IACS,SCAR,LMSW,LTRT,ITRN,QFLS,LTRN,SFLS,PLFL,ICSV,LACS,LTNK,AACI,ITNK,ACIP"
    },
    "IOCA": {
        "name": "IOCA", "shots": 50, "range": 200, "attackGround": 0, "attackShip": 150, "effectArmor": 0, "effectShield": 1, "accuracy": 70,
        "prio": "AIDC,ACRM,DISA,SHDU,RSDR,RHDR,RKDR,PLSA,PTSA,RBCR,SWBS,HLSA,SISA,IOSA,HLRM,PLTU,HLTU,RIDR,PLRM,PFGT,DSTR,FBCR,APTU,SMDU,MSSA,LLSA,FHML,ABAT,SWBD,FLTU,MSFR,SITU,AFGT,HFGT,SWFG,IOTU,IORM,SBOM,MSRM,CORV,ABOM,SWMD,MSTU,LLTU,RDFR,SFGT,DNGT,FIOT,LCMN,MCMN,SCMN,LFGT,IBTR,ALCR,RCYC,PRCY,RAFL,PRDR,ARCY,EXDR,SEDR,GTRN,LBTR,LMDU,LBOM,LPRD,CCOL,RFLS,GCOL,LNMN,ASPM,RTRN,MIVE,STRN,RRFV,PTRN,PMIV,LEVE,RFVE,SBTR,ASUD,HFLS,LRCO,SWFS,FCAR,PFLS,GRCO,EXCW,IXCW,SWCO,ARCO,FCOL,SWAD,WADR,SCAR,SMSW,ATRN,AFLS,HTRT,SPST,PLDC,STRT,SCOL,WFLS,FROR,LTRN,ATRT,HTRN,QFLS,STNK,LMSW,ICSV,HGBC,PTNK,CNSV,SFLS,ASCS,SSCD,LACS,ATNK,HTNK,ASED,ASCD,SUDR,SCDR,ALTM,ACIP,FLDP,AACI,LTNK,SSDR,SPDR,PCOR,SPND,RSPD,ASPD,SWSD,GCTS,PLFG,GDFM,GBOM,GDBH,PBOM,PTRM,SWPD,PTTU,GFGT,GDST,AMSA,SWTD,GLRD,HMDU,DTST,BTST,LAMN,MAMN,SAMN,FPTT,RTTN,APSA,LFMN,MFMN,SFMN,ICOL,RLBO,MMDU,ARDF,ARMS,HBOM,SWBO,ACRS,ALBO,SWIS,ITRT,ICAR,ACAR,IFLS,RSCD,BFLS,AMIV,IACS,LTRT,ITRN,PLFL,ITNK"
    },
    "PLCA": {
        "name": "PLCA", "shots": 20, "range": 400, "attackGround": 0, "attackShip": 500, "effectArmor": 0.4, "effectShield": 0.2, "accuracy": 40,
        "prio": "AIDC,ACRM,GCTS,GDFM,RSDR,PTSA,PCOR,RHDR,GBOM,RKDR,PLSA,RBCR,SWBS,PTRM,HLSA,SWPD,PTTU,PLRM,PLTU,GFGT,SISA,GDST,PLFG,ABAT,IOSA,HLRM,FHML,BTST,DNGT,HLTU,APTU,PBOM,FBCR,SMDU,DSTR,PFGT,SITU,MSFR,SWBD,IORM,FLTU,IOTU,ABOM,MSSA,LLSA,AFGT,RIDR,MSRM,HFGT,SWMD,MSTU,SWFG,LLTU,CORV,SBOM,RDFR,RLBO,LMDU,FIOT,SFGT,LFMN,MFMN,SFMN,MMDU,LCMN,MCMN,SCMN,HBOM,SWBO,IBTR,ALCR,RCYC,LFGT,PRCY,LBOM,RAFL,GTRN,ARCY,LBTR,ACRS,GCOL,ACAR,CCOL,RFLS,LPRD,PRDR,EXDR,SEDR,ATRT,ALBO,SWFS,FCAR,RTRN,MIVE,STRN,RRFV,LEVE,RFVE,PMIV,PTRN,SBTR,BFLS,LRCO,HFLS,PFLS,EXCW,IXCW,GRCO,IACS,SCAR,AMIV,SWCO,ARCO,FCOL,WFLS,LNMN,LMSW,SMSW,ATRN,HTRT,ASPM,AFLS,PLDC,STRT,ASUD,LTRN,SWAD,WADR,QFLS,LTRT,SCOL,FROR,HTRN,STNK,ICSV,HGBC,SFLS,CNSV,ASCS,PTNK,SPST,LACS,ATNK,HTNK,ALTM,LTNK,FLDP,SSCD,ASED,ASCD,SUDR,SCDR,PLFL,SSDR,SPDR,DISA,SHDU,SPND,RSPD,ASPD,SWSD,GDBH,AMSA,SWTD,GLRD,HMDU,DTST,LAMN,MAMN,SAMN,FPTT,RTTN,APSA,ICOL,ARDF,ARMS,SWIS,ITRT,ICAR,IFLS,RSCD,ITRN,AACI,ITNK,ACIP"
    },
    "PRCA": {
        "name": "PRCA", "shots": 2, "range": 500, "attackGround": 0, "attackShip": 40000, "effectArmor": 0, "effectShield": 1, "accuracy": 30,
        "prio": "AIDC,ACRM,DISA,SHDU,PCOR,GDBH,GDST,GDFM,RBCR,SWBS,GLRD,GBOM,PLFG,DTST,BTST,PTSA,PTRM,SWPD,PTTU,ABAT,AMSA,PBOM,DNGT,SWTD,GCTS,HMDU,FBCR,SMDU,DSTR,LAMN,MAMN,SAMN,FPTT,GFGT,ABOM,APTU,MSFR,FHML,SWBD,LMDU,MMDU,APSA,ARMS,RLBO,PLRM,PLSA,PLTU,RSDR,RDFR,SBOM,ARDF,PFGT,LFMN,MFMN,SFMN,ACRS,RHDR,CORV,ICOL,ALBO,SITU,SISA,RKDR,SWBO,HBOM,AFGT,IBTR,HFGT,SWFG,FIOT,IORM,IOSA,IOTU,FLTU,HLRM,HLSA,HLTU,RAFL,GTRN,LBTR,ACAR,GCOL,SFGT,LBOM,FCAR,RFLS,SWFS,RTRN,ATRT,MIVE,ASPM,RRFV,BFLS,CCOL,ARCY,LEVE,MSRM,SWMD,MSSA,MSTU,RFVE,LLSA,LLTU,SWIS,SBTR,ALCR,IACS,RIDR,AMIV,RCYC,ITRT,IXCW,LFGT,LRCO,ICAR,HFLS,LMSW,PRCY,WFLS,PMIV,EXCW,SCAR,ATRN,IFLS,SMSW,HTRT,LCMN,MCMN,SCMN,PTRN,LTRT,STRN,GRCO,LTRN,AFLS,SWCO,ARCO,FCOL,QFLS,HTRN,ICSV,HGBC,ASCS,STRT,SFLS,SCOL,PLDC,LACS,PFLS,CNSV,FROR,ITRN,LPRD,PRDR,EXDR,SEDR,ATNK,STNK,HTNK,ALTM,PTNK,ACIP,LTNK,FLDP,PLFL,AACI,RSCD,LNMN,SWAD,WADR,ASUD,ITNK,SPST,SSCD,ASED,ASCD,SUDR,SCDR,SSDR,SPDR,SPND,RSPD,ASPD,SWSD,RTTN"
    },
}

let shipData = {};
fetch('./Ships.json').then(response => {
    shipData = response.json();
});
let weaponData = {};
fetch('./Weapons.json').then(response => {
    weaponData = response.json();
});
let defenceData = {};
fetch('./Defence.json').then(response => {
    defenceData = response.json();
});
let mineData = {};
fetch('./Mines.json').then(response => {
    mineData = response.json();
});


const techStrings = ["Military", "Computer", "Shield", "Material", "Missile", "Laser", "Ion", "Plasma", "Proton", "Navigation", "Cyborg"];
const techStringsLong = ["Militärtechnik", "Coumputertechnik", "Schildtechnik", "Materialtechnik", "Raketentechnik", "Lasertechnik", "Ionentechnik", "Plasmatechnik", "Protonentechnik", "Navigationstechnik", "Cyborgtechnik"];
const shipList = ["WADR", "LFGT", "HFGT", "SFGT", "CORV", "MSFR", "DSTR", "ACRS", "DNGT"];
const defenceList = ["MSTU", "LLTU"];
const mineList = ["LNMN", "SCMN"];


let prioSheet = {
    "GTGN": "SFGT,HFGT,LFGT,WADR,DNGT,DSTR,MSFR,ACRS,CORV",
    "MSLN": "SFGT,HFGT,LFGT,MSFR,CORV,WADR,DNGT,DSTR,ACRS",
    "LACA": "SFGT,DNGT,HFGT,MSFR,DSTR,LFGT,CORV,WADR,ACRS",
    "XLAC": "DNGT,SFGT,ACRS,DSTR,MSFR,HFGT,CORV,LFGT,WADR",
    "HLCA": "DNGT,SFGT,HFGT,DSTR,MSFR,ACRS,LFGT,CORV,WADR",
    "IOCA": "SFGT,HFGT,DSTR,DNGT,MSFR,LFGT,CORV,WADR,ACRS",
    "PLCA": "DNGT,SFGT,HFGT,MSFR,DSTR,LFGT,CORV,ACRS,WADR",
    "PRCA": "DNGT,ACRS,DSTR,MSFR,SFGT,HFGT,CORV,LFGT,WADR"
}


const currentDate = new Date();
let timeField = document.getElementById("MessageTime");
timeField.innerHTML = currentDate.getDay() + "." + currentDate.getMonth() + "." + currentDate.getFullYear() + " " + addZero(currentDate.getHours()) + ":" + addZero(currentDate.getMinutes()) + ":" + addZero(currentDate.getSeconds());
let combatSimDiv = document.getElementById("combatSimDiv");

function addZero(num) {
    if (num < 10) {
        return "0" + num;
    }
    return num;
}

for (let i = 1; i <= 2; i++) {
    let kamikazeCheck = document.getElementById("kamikazeCheck" + i);
    kamikazeCheck.addEventListener("input", (event) => {
        let sneakCheck = document.getElementById("sneakCheck" + i);
        if (sneakCheck.checked) {
            sneakCheck.checked = false;
        }
        runEverything();
    })
    let sneakCheck = document.getElementById("sneakCheck" + i);
    sneakCheck.addEventListener("input", (event) => {
        let kamikazeCheck = document.getElementById("kamikazeCheck" + i);
        if (kamikazeCheck.checked) {
            kamikazeCheck.checked = false;
        }
        runEverything();
    })
}

let fleetIDs1 = [];
let fleetIDs2 = [];
let fleetAddButton1 = document.getElementById("fleetAddButton1");
fleetAddButton1.onclick = function () {
    addFleet(fleetIDs1, 1);
    techLogic(fleetIDs1);
    shipLogic(fleetIDs1);
}
let fleetAddButton2 = document.getElementById("fleetAddButton2");
fleetAddButton2.onclick = function () {
    addFleet(fleetIDs2, 2);
    techLogic(fleetIDs2);
    shipLogic(fleetIDs2);
}
addFleet(fleetIDs1, 1);
addFleet(fleetIDs2, 2);

function addFleet(fleetIDs, num) {
    let fleetID = Math.floor(Math.random() * 1000000) + 1;
    fleetIDs.push(fleetID);
    let fleetHolderDiv = document.getElementById("fleetHolderDiv" + num);
    fleetHolderDiv.setAttribute("style", "margin-top: 10px");
    let fleetHolder = document.createElement("div");
    fleetHolder.id = "fleetHolder" + fleetID;
    fleetHolder.setAttribute("style", "display: block");
    let fleetHideShowButton = document.createElement("button");
    fleetHideShowButton.className = "SystemGfxButton Green Bold light120";
    fleetHideShowButton.setAttribute("style", "padding-bottom: 3px; margin-top: 10px");
    fleetHideShowButton.innerHTML = "Ausblenden";
    fleetHideShowButton.onclick = function () {
        if (fleetHolder.style.display === "block") {
            fleetHolder.style.display = "none";
            fleetHideShowButton.innerHTML = "Einblenden";
        } else {
            fleetHolder.style.display = "block";
            fleetHideShowButton.innerHTML = "Ausblenden";
        }
    }
    fleetHolderDiv.appendChild(fleetHideShowButton);
    let modsDiv = document.createElement("div");
    modsDiv.setAttribute("style", "text-align: center; margin-top: 10px");
    const speedDiv = document.createElement('div');
    speedDiv.setAttribute("style", "position: relative; margin-left: 41px");
    const speedText1 = document.createTextNode('Vorsichtig');
    const modSpeedAgility = document.createElement('input');
    modSpeedAgility.id = "inputModSpeedAgility" + fleetID;
    modSpeedAgility.type = 'range';
    modSpeedAgility.min = '-100';
    modSpeedAgility.max = '100';
    modSpeedAgility.step = '25';
    modSpeedAgility.value = '0';
    modSpeedAgility.style.width = '200px';
    const speedText2 = document.createTextNode('Voranstürmend');
    speedDiv.appendChild(speedText1);
    speedDiv.appendChild(modSpeedAgility);
    speedDiv.appendChild(speedText2);
    const rangeDiv = document.createElement('div');
    rangeDiv.setAttribute("style", "position: relative, left: 41px; display: block");
    const rangeText1 = document.createTextNode('Hohe Reichweite');
    const modRangeDamage = document.createElement('input');
    modRangeDamage.id = "inputModRangeDamage" + fleetID;
    modRangeDamage.type = 'range';
    modRangeDamage.min = '-100';
    modRangeDamage.max = '100';
    modRangeDamage.step = '25';
    modRangeDamage.value = '0';
    modRangeDamage.style.width = '200px';
    const rangeText2 = document.createTextNode('Hoher Schaden');
    rangeDiv.appendChild(rangeText1);
    rangeDiv.appendChild(modRangeDamage);
    rangeDiv.appendChild(rangeText2);
    modsDiv.appendChild(speedDiv);
    modsDiv.appendChild(rangeDiv);
    fleetHolder.appendChild(modsDiv);
    modSpeedAgility.addEventListener("input", (event) => {
        runEverything();
    })
    modRangeDamage.addEventListener("input", (event) => {
        runEverything();
    })

    let techsDiv = document.createElement("div");
    let techsDivLeft = document.createElement("div");
    techsDivLeft.setAttribute("style", "display: inline-block; vertical-align: top");
    techsDivLeft.id = "techsDivLeft" + fleetID;
    let techsDivRight = document.createElement("div");
    techsDivRight.setAttribute("style", "display: inline-block; vertical-align: top");
    techsDivRight.id = "techsDivRight" + fleetID;
    for (let i = 0; i < techStrings.length; i++) {
        const techDiv = document.createElement("div");
        techDiv.setAttribute("style", "position: relative; display: block; margin: 10px 0px 0px 0px");
        const techSlider = document.createElement("input");
        techSlider.id = "inputTechSlider" + techStrings[i] + fleetID;
        techSlider.name = techStringsLong[i];
        techSlider.type = "range";
        techSlider.min = "1";
        techSlider.max = "31";
        techSlider.value = "31";
        if (techStrings[i] === "Cyborg") {
            techSlider.value = "1";
        }
        techSlider.style.width = "75px";
        const techNumber = document.createElement("input");
        techNumber.id = "inputTechField" + techStrings[i] + fleetID;
        techNumber.type = "number";
        techNumber.setAttribute("style", "width: 35px; position: relative; top: -3px")
        techNumber.value = "31";
        techNumber.min = "1";
        techNumber.max = "31";
        const techName = document.createTextNode(" " + techStringsLong[i]);
        techSlider.addEventListener("input", (event) => {
            techNumber.value = techSlider.value
            runEverything();
        })
        techNumber.addEventListener("input", (event) => {
            techSlider.value = techNumber.value
            runEverything();
        })
        techDiv.appendChild(techSlider);
        techDiv.appendChild(techNumber);
        techDiv.appendChild(techName);
        if (i < Math.ceil(techStrings.length / 2)) {
            techsDivLeft.appendChild(techDiv);
        } else {
            techsDivRight.appendChild(techDiv);
        }
    }
    techsDiv.appendChild(techsDivLeft);
    techsDiv.appendChild(techsDivRight);
    fleetHolder.appendChild(techsDiv);

    let shipsDiv = document.createElement("div");
    let shipsDivLeft = document.createElement("div");
    shipsDivLeft.setAttribute("style", "display: inline-block; margin-top: 10px; vertical-align: top");
    let shipsDivMiddle = document.createElement("div");
    shipsDivMiddle.setAttribute("style", "display: inline-block; margin-top: 10px; vertical-align: top");
    let shipsDivRight = document.createElement("div");
    shipsDivRight.setAttribute("style", "display: inline-block; margin-top: 10px; vertical-align: top");

    for (let i = 0; i < shipList.length; i++) {
        let shipDiv = document.createElement("div");
        shipDiv.setAttribute("style", "margin-top:10px");
        let shipInput = document.createElement("input");
        shipInput.setAttribute("style", "width:100px; display:inline-block");
        shipInput.id = "inputShip" + shipList[i] + fleetID;
        shipInput.addEventListener("input", (event) => {
            runEverything();
        })
        const shipName = document.createTextNode(" " + data[shipList[i]].name);
        shipDiv.appendChild(shipInput);
        shipDiv.appendChild(shipName);
        shipsDivLeft.appendChild(shipDiv);
    }
    for (let i = 0; i < defenceList.length; i++) {
        let shipDiv = document.createElement("div");
        shipDiv.setAttribute("style", "margin-top:10px");
        let shipInput = document.createElement("input");
        shipInput.setAttribute("style", "width:100px; display:inline-block");
        shipInput.id = "inputShip" + defenceList[i] + fleetID;
        shipInput.addEventListener("input", (event) => {
            runEverything();
        })
        // const shipName = document.createTextNode(" " + data[defenceList[i]].name);
        shipDiv.appendChild(shipInput);
        // shipDiv.appendChild(shipName);
        shipsDivMiddle.appendChild(shipDiv);
    }
    for (let i = 0; i < mineList.length; i++) {
        let shipDiv = document.createElement("div");
        shipDiv.setAttribute("style", "margin-top:10px");
        let shipInput = document.createElement("input");
        shipInput.setAttribute("style", "width:100px; display:inline-block");
        shipInput.id = "inputShip" + mineList[i] + fleetID;
        shipInput.addEventListener("input", (event) => {
            runEverything();
        })
        // const shipName = document.createTextNode(" " + data[mineList[i]].name);
        shipDiv.appendChild(shipInput);
        // shipDiv.appendChild(shipName);
        shipsDivRight.appendChild(shipDiv);
    }
    shipsDiv.appendChild(shipsDivLeft);
    shipsDiv.appendChild(shipsDivMiddle);
    shipsDiv.appendChild(shipsDivRight);
    fleetHolder.appendChild(shipsDiv);
    fleetHolderDiv.appendChild(fleetHolder);
}

function techLogic(fleetIDs) {
    for (let i = 0; i < fleetIDs.length; i++) {
        for (let j = 0; j < techStrings.length; j++) {
            let inputTechSlider = document.getElementById("inputTechSlider" + techStrings[j] + fleetIDs[i]);
            let inputTechField = document.getElementById("inputTechField" + techStrings[j] + fleetIDs[i]);
            inputTechSlider.addEventListener("input", (event) => {
                inputTechField.value = inputTechSlider.value
                runEverything();
            })
            inputTechField.addEventListener("input", (event) => {
                inputTechSlider.value = inputTechField.value
                runEverything();
            })
        }
    }
}

function shipLogic(fleetIDs) {
    for (let i = 0; i < fleetIDs.length; i++) {
        for (let j = 0; j < shipList.length; j++) {
            let inputShipNumberField = document.getElementById("inputShip" + shipList[j] + fleetIDs[i]);
            inputShipNumberField.addEventListener("input", (event) => {
                runEverything();
            })
        }
        let speedAgility = document.getElementById("inputModSpeedAgility" + fleetIDs[i]);
        speedAgility.addEventListener("input", (event) => {
            runEverything();
        })
        let rangeDamage = document.getElementById("inputModRangeDamage" + fleetIDs[i]);
        rangeDamage.addEventListener("input", (event) => {
            runEverything();
        })
    }
}

function runEverything() {
    let player1 = {};
    let player2 = {};
    createPlayerValues(player1);
    createPlayerValues(player2);
    for (let i = 0; i < fleetIDs1.length; i++) {
        loadShips(player1, fleetIDs1[i], 1);
    }
    for (let i = 0; i < fleetIDs2.length; i++) {
        loadShips(player2, fleetIDs2[i], 2);
    }
    simulateCombat(player1, player2);
}

let shipAmountChanged = false;
let shipAmountFirstRound = true;
runEverything();

// let buttonRunSimulation = document.getElementById("buttonRunSimulation");
// buttonRunSimulation.addEventListener("click", function () {
//     runEverything();
// });

function createPlayerValues(player) {
    player.ships = [];
}

function loadShips(player, fleetID, num) {
    for (let i = 0; i < shipList.length; i++) {
        let inputShipNumberField = document.getElementById("inputShip" + shipList[i] + fleetID);
        let inputShipNumber = parseInt(inputShipNumberField.value);
        if (inputShipNumber > 0) {
            let ship = {...data[inputShipNumberField.id.substring(9, 13)]};
            ship.amount = inputShipNumber;
            ship.amountInitial = inputShipNumber;
            ship.weapons = [];
            ship.position = 0;
            ship.direction = 1;
            if (num === 1) {
                ship.position = 1000;
                ship.direction = -1;
            }
            ship.shotsNeededNum = 0;
            ship.inRange = false;
            ship.mu = 0;
            ship.rho = 0;
            ship.damagedThisRound = false;
            if (!ship.hasOwnProperty("stealth")) {
                ship.stealth = 1000;
            }
            let weapons = ship.weaponList;
            for (const weaponI in weapons) {
                let weapon = {...data[weaponI]};
                weapon.amount = weapons[weaponI];
                if (document.getElementById("sneakCheck" + num).checked) {
                    weapon.attackShip *= (10 + ((weapon.attackShip - 1) / (31 - 1)) * (30 - 10)) / 100;
                    weapon.attackGround *= (10 + ((weapon.attackGround - 1) / (31 - 1)) * (30 - 10)) / 100;
                }
                if (document.getElementById("kamikazeCheck" + num).checked) {
                    weapon.attackShip *= 1.5;
                    weapon.attackGround *= 1.5;
                }
                ship.weapons.push(weapon);
            }
            applyTechs(ship, fleetID);
            loadMods(ship, fleetID);
            player.ships.push(ship);
        }
    }
}

function applyTechs(ship, fleetID) {
    let military = parseInt(document.getElementById("inputTechSliderMilitary" + fleetID).value);
    military = (military - 1) / 30 + 1;

    let computer = parseInt(document.getElementById("inputTechSliderComputer" + fleetID).value);
    computer = (computer - 1) / 30 + 1;

    let shield = parseInt(document.getElementById("inputTechSliderShield" + fleetID).value);
    shield = (shield - 1) / 30 + 1;

    let material = parseInt(document.getElementById("inputTechSliderMaterial" + fleetID).value);
    material = (material - 1) / 30 + 1;

    let missile = parseInt(document.getElementById("inputTechSliderMissile" + fleetID).value);
    missile = (missile - 1) / 30 + 1;
    // (x - 0.75) / 30 + 1 Leichter Werfer ???
    //


    let laser = parseInt(document.getElementById("inputTechSliderLaser" + fleetID).value);
    let laser2 = (laser - 4) / 30 + 1; // (x - 3.4) / 30 + 1 ???
    laser = (laser - 1) / 30 + 1;
    // x / 30 + 1 LFGT ???
    // (x-0.1)/30 + 1 SFGT ???

    let ion = parseInt(document.getElementById("inputTechSliderIon" + fleetID).value);
    ion = (ion - 1) / 30 + 1; // (x - 1) / 30 + 1

    let plasma = parseInt(document.getElementById("inputTechSliderPlasma" + fleetID).value);
    plasma = (plasma - 1) / 30 + 1;

    let proton = parseInt(document.getElementById("inputTechSliderProton" + fleetID).value);
    proton = (proton - 1) / 30 + 1;

    let cyborg = parseInt(document.getElementById("inputTechSliderCyborg" + fleetID).value);
    cyborg = (cyborg - 1) / 30 + 1;

    ship.shield *= shield;
    ship.armor *= material;
    ship.agility *= cyborg;
    for (let w = 0; w < ship.weapons.length; w++) {
        ship.weapons[w].range *= military;
        ship.weapons[w].accuracy *= computer;
        ship.weapons[w].accuracy *= cyborg;
        if (ship.weapons[w].name === "MSLN") {
            ship.weapons[w].attackShip *= missile;
            ship.weapons[w].attackGround *= missile;
        }
        if (ship.weapons[w].name === "LACA" || ship.weapons[w].name === "XLAC") {
            ship.weapons[w].attackShip *= laser;
            ship.weapons[w].attackGround *= laser;
        }
        if (ship.weapons[w].name === "HLCA") {
            ship.weapons[w].attackShip *= laser2;
            ship.weapons[w].attackGround *= laser2;
        }
        if (ship.weapons[w].name === "IOCA") {
            ship.weapons[w].attackShip *= ion;
            ship.weapons[w].attackGround *= ion;
        }
        if (ship.weapons[w].name === "PLCA") {
            ship.weapons[w].attackShip *= plasma;
            ship.weapons[w].attackGround *= plasma;
        }
        if (ship.weapons[w].name === "PRCA") {
            ship.weapons[w].attackShip *= proton;
            ship.weapons[w].attackGround *= proton;
        }

    }
}

function loadMods(ship, fleetID) {
    let speedAgilityValue = parseInt(document.getElementById("inputModSpeedAgility" + fleetID).value) / 100;
    let rangeDamageValue = parseInt(document.getElementById("inputModRangeDamage" + fleetID).value) / 100;
    ship.speed *= Math.pow(1.3, speedAgilityValue);
    if (speedAgilityValue > 0) {
        for (let w = 0; w < ship.weapons.length; w++) {
            ship.weapons[w].accuracy *= Math.pow(0.5, speedAgilityValue);
        }
    }
    if (speedAgilityValue <= 0) {
        ship.agility *= Math.pow(2, speedAgilityValue);
    }
    for (let w = 0; w < ship.weapons.length; w++) {
        ship.weapons[w].attackShip *= Math.pow((3.2 - rangeDamageValue * 1.2), rangeDamageValue);
        ship.weapons[w].attackGround *= Math.pow((3.2 - rangeDamageValue * 1.2), rangeDamageValue);
        ship.weapons[w].range *= Math.pow((rangeDamageValue * 0.5 + 2.2), rangeDamageValue * -1);
    }

}


function simulateCombat(player1, player2) {
    console.log(player1.ships);
    console.log(player2.ships);

    shipAmountChanged = false;
    combatSimDiv.innerHTML = "";
    shipAmountFirstRound = true;

    // 26 Kampfrunden
    for (let i = 0; i < 26; i++) {
        console.log("----------------- Kampfrunde " + (i + 1) + " ----------------");

        // 4 Subrunden je Kampf
        for (let j = 0; j < 4; j++) {
            console.log("------------------ Subrunde " + (j + 1) + " -----------------");
            combatCalculations(player1, player2, j, "Angreifer");
            combatCalculations(player2, player1, j, "Verteidiger");
            // console.log("                      ---")
            shipCalculations(player2);
            shipCalculations(player1);
        }

        // Kampfrunden ohne Veränderung zusammenfassen
        if (shipAmountChanged || shipAmountFirstRound) {
            shipAmountChanged = false;

            const combatSimRoundText = document.createElement("p");
            combatSimRoundText.innerHTML = "Kampfrunde " + (i + 1) + " :";
            combatSimDiv.appendChild(combatSimRoundText);
            const combatSimTable = document.createElement("table");
            combatSimTable.className = "MessageTable";
            combatSimTable.setAttribute("cellpadding", "0");
            combatSimTable.setAttribute("cellspacing", "0");
            combatSimTable.setAttribute("border", "0");
            combatSimTable.setAttribute("width", "590");
            const combatSimTableOuterRow = document.createElement("tr");
            const combatSimTableOuterCell1 = document.createElement("td");
            combatSimTableOuterCell1.className = "MessageBodyText";
            combatSimTableOuterCell1.setAttribute("width", "290");
            combatSimTableOuterCell1.setAttribute("valign", "top");
            const combatSimParagraph1 = document.createElement("p");
            const combatSimUnderline1 = document.createElement("u");
            combatSimUnderline1.textContent = "Angreifer : ";
            combatSimParagraph1.appendChild(combatSimUnderline1);
            combatSimTableOuterCell1.appendChild(combatSimParagraph1);
            const combatSimInnerTable1 = document.createElement("table");
            combatSimInnerTable1.setAttribute("cellpadding", "0");
            combatSimInnerTable1.setAttribute("cellspacing", "0");
            combatSimInnerTable1.setAttribute("border", "0");
            combatSimInnerTable1.setAttribute("width", "290");
            combatSimInnerTable1.className = "MessageTable";
            const combatSimTableOuterCell2 = document.createElement("td");
            combatSimTableOuterCell2.className = "MessageBodyText";
            combatSimTableOuterCell2.setAttribute("width", "290");
            combatSimTableOuterCell2.setAttribute("valign", "top");
            const combatSimParagraph2 = document.createElement("p");
            const combatSimUnderline2 = document.createElement("u");
            combatSimUnderline2.textContent = "Verteidiger : ";
            combatSimParagraph2.appendChild(combatSimUnderline2);
            combatSimTableOuterCell2.appendChild(combatSimParagraph2);
            const combatSimInnerTable2 = document.createElement("table");
            combatSimInnerTable2.setAttribute("cellpadding", "0");
            combatSimInnerTable2.setAttribute("cellspacing", "0");
            combatSimInnerTable2.setAttribute("border", "0");
            combatSimInnerTable2.setAttribute("width", "290");
            combatSimInnerTable2.className = "MessageTable";
            combatSimDiv.appendChild(combatSimTable);
            combatSimTable.appendChild(combatSimTableOuterRow);
            combatSimTableOuterRow.appendChild(combatSimTableOuterCell1);
            combatSimTableOuterRow.appendChild(combatSimTableOuterCell2);

            addHTMLLine(player1, combatSimTableOuterCell1);
            addHTMLLine(player2, combatSimTableOuterCell2);
        }
        shipAmountFirstRound = false;

    }

    // Kampfrunden ohne zerstörte Schiffe zusammenfassen
    for (let i = 0; i < combatSimDiv.children.length - 2; i += 2) {
        if (getRoundNumberFromString(combatSimDiv.children[i + 2].innerHTML) - getRoundNumberFromString(combatSimDiv.children[i].innerHTML) > 1) {
            combatSimDiv.children[i].innerHTML = "Kampfrunden " + getRoundNumberFromString(combatSimDiv.children[i].innerHTML) + " bis " + (getRoundNumberFromString(combatSimDiv.children[i + 2].innerHTML) - 1) + " :";
        } else {
            combatSimDiv.children[i].innerHTML = "Kampfrunde " + getRoundNumberFromString(combatSimDiv.children[i].innerHTML) + " :";
        }
    }
    if (getRoundNumberFromString(combatSimDiv.children[combatSimDiv.children.length - 2].innerHTML) < 26) {
        combatSimDiv.children[combatSimDiv.children.length - 2].innerHTML = "Kampfrunden " + getRoundNumberFromString(combatSimDiv.children[combatSimDiv.children.length - 2].innerHTML) + " bis 26 :";
    }
}

function getRoundNumberFromString(str) {
    return parseInt(str.split(" ")[str.split(" ").length - 2]);
}

function addHTMLLine(player, combatSimTableOuterCell) {
    for (let s = 0; s < player.ships.length; s++) {
        const combatSimRow = document.createElement("tr");
        const combatSimCell1 = document.createElement("td");
        combatSimCell1.className = "MessageBodyText";
        combatSimCell1.setAttribute("width", "40");
        combatSimCell1.textContent = player.ships[s].name;
        const combatSimCell2 = document.createElement("td");
        combatSimCell2.className = "MessageBodyText";
        combatSimCell2.setAttribute("width", "200");
        const combatSimSpan = document.createElement("span");
        combatSimSpan.className = "MessageReportLink";
        combatSimSpan.setAttribute("title", "Staffel Flaggschiff");
        combatSimSpan.textContent = player.ships[s].nameLong;
        combatSimCell2.appendChild(combatSimSpan);
        const combatSimCell3 = document.createElement("td");
        combatSimCell3.setAttribute("width", "40");
        combatSimCell3.setAttribute("align", "right");
        combatSimCell3.textContent = player.ships[s].amount;
        if (player.ships[s].amount === 0) {
            combatSimCell3.className = "MessageBodyTextDead";
        } else {
            combatSimCell3.className = "MessageBodyText";
        }
        if (player.ships[s].damagedThisRound) {
            combatSimCell3.className = "MessageBodyTextWarn";
            player.ships[s].damagedThisRound = false;
        }
        combatSimRow.appendChild(combatSimCell1);
        combatSimRow.appendChild(combatSimCell2);
        combatSimRow.appendChild(combatSimCell3);
        combatSimTableOuterCell.appendChild(combatSimRow);
    }
}

function combatCalculations(player1, player2, j, role) {
    // Schiffe feuern

    // Loop über alle verschiedenen Schiffstypen von Spieler 1
    for (let s1 = 0; s1 < player1.ships.length; s1++) {

        // Loop über Waffen vom Schiff von Spieler 1
        for (let w = 0; w < player1.ships[s1].weapons.length; w++) {
            let shotsAvailable = player1.ships[s1].amount * player1.ships[s1].weapons[w].amount * player1.ships[s1].weapons[w].shots;
            shotsAvailable = Math.floor((shotsAvailable + (2 * j + 1) / 2) / 4)

            // Check welche Schiffe von Spieler 2 in Reichweite sind
            player1.ships[s1].weapons[w].shipsInRange = [];
            for (let s2 = 0; s2 < player2.ships.length; s2++) {
                let rangeCheck = false;
                let stealthCheck = false;
                if ((player2.ships[s2].position - player1.ships[s1].position) * player1.ships[s1].direction <= player2.ships[s2].stealth) {
                    stealthCheck = true;
                }
                if ((player2.ships[s2].position - player1.ships[s1].position) * player1.ships[s1].direction <= player1.ships[s1].weapons[w].range) {
                    rangeCheck = true;
                }
                if (stealthCheck && rangeCheck) {
                    player1.ships[s1].weapons[w].shipsInRange.push(player2.ships[s2]);
                }
            }

            // Schüsse aufteilen auf die Gegnerischen Schiffe

            // Schiffe von Spieler 2 nach der Prioritätsliste sortieren
            player1.ships[s1].weapons[w].shipsInRange.sort((a, b) => {
                return prioSheet[player1.ships[s1].weapons[w].name].split(",").indexOf(a.name) - prioSheet[player1.ships[s1].weapons[w].name].split(",").indexOf(b.name)
            });

            // Schüsse berechnen, die auf jeden Schiffstyp von Spieler 2 maximal abgebenen können bevor er komplett zerstört ist.

            // Splitshots Box
            for (let r = 0; r < player1.ships[s1].weapons[w].shipsInRange.length; r++) {
                let effectArmor = player1.ships[s1].weapons[w].shipsInRange[r].armor * (player1.ships[s1].weapons[w].effectArmor);
                let effectShield = player1.ships[s1].weapons[w].shipsInRange[r].shield * (player1.ships[s1].weapons[w].effectShield);
                let effectTotal = player1.ships[s1].weapons[w].attackShip - effectArmor - effectShield;
                let damage = 4 * effectTotal * player1.ships[s1].weapons[w].shipsInRange[r].hull / (4 * player1.ships[s1].weapons[w].shipsInRange[r].hull + effectTotal);
                if (damage < 0) {
                    damage = 0;
                }
                let accuracy = player1.ships[s1].weapons[w].accuracy / (player1.ships[s1].weapons[w].accuracy + player1.ships[s1].weapons[w].shipsInRange[r].agility + 10);
                let shotsNeeded = Math.round((player1.ships[s1].weapons[w].shipsInRange[r].hull / damage) / accuracy);
                if (isNaN(shotsNeeded) || !isFinite(shotsNeeded)) {
                    shotsNeeded = 10000000;
                }
                player1.ships[s1].weapons[w].shipsInRange[r].shotsNeededNum = shotsNeeded * player1.ships[s1].weapons[w].shipsInRange[r].amount;


                // // Daten aus dem FlowSheet
                // const flowSheetData = {
                //     "SFGT": {"GTGN": 2452, "MSLN": 51, "LACA": 21, "XLAC": 12, "HLCA": 7, "IOCA": 22, "PLCA": 10, "PRCA": 2},
                //     "HFGT": {"GTGN": 5602, "MSLN": 97, "LACA": 43, "XLAC": 25, "HLCA": 15, "IOCA": 45, "PLCA": 21, "PRCA": 2},
                //     "LFGT": {"GTGN": 5604, "MSLN": 70, "LACA": 37, "XLAC": 29, "HLCA": 14, "IOCA": 39, "PLCA": 20, "PRCA": 3},
                //     "WADR": {"GTGN": 5092, "MSLN": 45, "LACA": 37, "XLAC": 84, "HLCA": 24, "IOCA": 39, "PLCA": 32, "PRCA": 22},
                //     "DNGT": {"GTGN": 10000000, "MSLN": 10000000, "LACA": 2690, "XLAC": 577, "HLCA": 623, "IOCA": 6515, "PLCA": 887, "PRCA": 12},
                //     "DSTR": {"GTGN": 10000000, "MSLN": 10000000, "LACA": 458, "XLAC": 154, "HLCA": 122, "IOCA": 403, "PLCA": 172, "PRCA": 4},
                //     "MSFR": {"GTGN": 10000000, "MSLN": 1041, "LACA": 202, "XLAC": 77, "HLCA": 60, "IOCA": 314, "PLCA": 84, "PRCA": 2},
                //     "ACRS": {"GTGN": 10000000, "MSLN": 10000000, "LACA": 10000000, "XLAC": 425, "HLCA": 458, "IOCA": 10000000, "PLCA": 2191, "PRCA": 7},
                //     "CORV": {"GTGN": 10000000, "MSLN": 314, "LACA": 108, "XLAC": 52, "HLCA": 35, "IOCA": 122, "PLCA": 49, "PRCA": 2}
                // }
                // let shotsNeededNum = flowSheetData[player1.ships[s1].weapons[w].shipsInRange[r].name][player1.ships[s1].weapons[w].name];
                // player1.ships[s1].weapons[w].shipsInRange[r].shotsNeededNum = shotsNeededNum * player1.ships[s1].weapons[w].shipsInRange[r].amount;
            }

            let shotsNeeded = 0;
            for (let r = 0; r < player1.ships[s1].weapons[w].shipsInRange.length; r++) {
                if (shotsNeeded < shotsAvailable) {
                    shotsNeeded = shotsNeeded + player1.ships[s1].weapons[w].shipsInRange[r].shotsNeededNum;
                }
            }

            let shotsUpscale = 1;
            if (Math.min(shotsNeeded, shotsAvailable) !== 0) {
                shotsUpscale = shotsAvailable / Math.min(shotsNeeded, shotsAvailable);
            }

            for (let r = 0; r < player1.ships[s1].weapons[w].shipsInRange.length; r++) {
                player1.ships[s1].weapons[w].shipsInRange[r].shotsNum = Math.floor(Math.min(player1.ships[s1].weapons[w].shipsInRange[r].shotsNeededNum * shotsUpscale, shotsAvailable));
                shotsAvailable = shotsAvailable - Math.min(player1.ships[s1].weapons[w].shipsInRange[r].shotsNeededNum * shotsUpscale, shotsAvailable);
            }
            for (let r = 0; r < player1.ships[s1].weapons[w].shipsInRange.length; r++) {

                // Anzahl der Treffer
                let hitProbability = player1.ships[s1].weapons[w].accuracy / (player1.ships[s1].weapons[w].accuracy + player1.ships[s1].weapons[w].shipsInRange[r].agility + 10);
                // console.log("HitProbability " + player1.ships[s1].name + " (" + player1.ships[s1].weapons[w].name + ") -> " + player1.ships[s1].weapons[w].shipsInRange[r].name + ": " + hitProbability);
                let hitMul = Math.round(player1.ships[s1].weapons[w].shipsInRange[r].shotsNum * hitProbability);
                let hitMulProb = Math.sqrt(hitMul * (1 - hitProbability));
                const random = 0.5;
                let numHits = invNormDist(random, hitMul, hitMulProb);
                if (Math.round(numHits) - numHits < 0.0001) { // manchmal wenn 1 rauskommen sollte kommt 0.99999999999 raus, das wird dann fälschlicherwiese abgerundet
                    numHits += 0.0001;
                }
                numHits = Math.floor(numHits);
                if (numHits < 0) {
                    numHits = 0;
                }

                // Treffer-Effekt
                let armorEff = player1.ships[s1].weapons[w].effectArmor * player1.ships[s1].weapons[w].shipsInRange[r].armor;
                let shieldEff = player1.ships[s1].weapons[w].effectShield * player1.ships[s1].weapons[w].shipsInRange[r].shield;
                let effect = (player1.ships[s1].weapons[w].attackShip - armorEff - shieldEff);
                effect = 4 * effect * player1.ships[s1].weapons[w].shipsInRange[r].hull / (4 * player1.ships[s1].weapons[w].shipsInRange[r].hull + effect);
                if (effect < 0) {
                    effect = 0;
                }

                // Schaden berechnen
                let shipAmountInv = 1 / player1.ships[s1].weapons[w].shipsInRange[r].amount
                let mu = effect * numHits * (shipAmountInv);
                let rho = effect * effect * numHits * shipAmountInv * (1 - shipAmountInv);
                if (player1.ships[s1].weapons[w].shipsInRange[r].amount > 0) {
                    player1.ships[s1].weapons[w].shipsInRange[r].mu += mu;
                    player1.ships[s1].weapons[w].shipsInRange[r].rho += rho;
                }
                // console.log(player1.ships[s1].name + " " + player1.ships[s1].weapons[w].name + " " + player1.ships[s1].weapons[w].shipsInRange[r].name + " " + player1.ships[s1].weapons[w].shipsInRange[r].shotsNum + " " + numHits + " " + effect)
                console.log(role + ": " + player1.ships[s1].name + " -> " + player1.ships[s1].weapons[w].shipsInRange[r].name + " -> " + player1.ships[s1].weapons[w].shipsInRange[r].shotsNum + " Schüsse -> " + numHits + " Treffer");
            }

        }
    }

}

function shipCalculations(player) {

    // Verbleibende Schiffe berechnen

    // Loop über alle Schiffe von Spieler 2
    for (let s = 0; s < player.ships.length; s++) {
        let remainingShips = normalcdf(player.ships[s].hull, player.ships[s].mu - 0.5, Math.sqrt(player.ships[s].rho));
        remainingShips = Math.floor(remainingShips * player.ships[s].amountInitial + 0.5);
        if (player.ships[s].amount !== remainingShips) {
            shipAmountChanged = true;
            player.ships[s].damagedThisRound = true;
        }
        player.ships[s].amount = remainingShips;
    }


    // Schiffe bewegen
    for (let s = 0; s < player.ships.length; s++) {
        player.ships[s].position += (player.ships[s].direction * player.ships[s].speed) / 4;
        // console.log(player.ships[s].name + " " + player.ships[s].amountInitial + " " + player.ships[s].amount + " " + player.ships[s].position + " " + player.ships[s].direction + " " + Math.round(player.ships[s].mu * 100000) / 100000 + " " + Math.round(player.ships[s].rho * 100000) / 100000)
    }
}

function erfcinv(p) {
    let j = 0;
    let x, err, t, pp;
    if (p >= 2)
        return -100;
    if (p <= 0)
        return 100;
    pp = (p < 1) ? p : 2 - p;
    t = Math.sqrt(-2 * Math.log(pp / 2));
    x = -0.70711 * ((2.30753 + t * 0.27061) /
        (1 + t * (0.99229 + t * 0.04481)) - t);
    for (; j < 2; j++) {
        err = erfc(x) - pp;
        x += err / (1.12837916709551257 * Math.exp(-x * x) - x * err);
    }
    return (p < 1) ? x : -x;
}

function erfc(x) {
    return 1 - erf(x);
}

function erf(x) {
    let cof = [-1.3026537197817094, 6.4196979235649026e-1, 1.9476473204185836e-2,
        -9.561514786808631e-3, -9.46595344482036e-4, 3.66839497852761e-4,
        4.2523324806907e-5, -2.0278578112534e-5, -1.624290004647e-6,
        1.303655835580e-6, 1.5626441722e-8, -8.5238095915e-8,
        6.529054439e-9, 5.059343495e-9, -9.91364156e-10,
        -2.27365122e-10, 9.6467911e-11, 2.394038e-12,
        -6.886027e-12, 8.94487e-13, 3.13092e-13,
        -1.12708e-13, 3.81e-16, 7.106e-15,
        -1.523e-15, -9.4e-17, 1.21e-16,
        -2.8e-17
    ];
    let j = cof.length - 1;
    let isneg = false;
    let d = 0;
    let dd = 0;
    let t, ty, tmp, res;

    if (x < 0) {
        x = -x;
        isneg = true;
    }

    t = 2 / (2 + x);
    ty = 4 * t - 2;

    for (; j > 0; j--) {
        tmp = d;
        d = ty * d - dd + cof[j];
        dd = tmp;
    }

    res = t * Math.exp(-x * x + 0.5 * (cof[0] + ty * d) - dd);
    return isneg ? res - 1 : 1 - res;
}

function invNormDist(p, mean, std) {
    return -1.41421356237309505 * std * erfcinv(2 * p) + mean;
}

function normalcdf(to, mean, sigma) {
    let z = (to - mean) / Math.sqrt(2 * sigma * sigma);
    let t = 1 / (1 + 0.3275911 * Math.abs(z));
    let a1 = 0.254829592;
    let a2 = -0.284496736;
    let a3 = 1.421413741;
    let a4 = -1.453152027;
    let a5 = 1.061405429;
    let erf = 1 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * Math.exp(-z * z);
    let sign = 1;
    if (z < 0) {
        sign = -1;
    }
    return (1 / 2) * (1 + sign * erf);
}