@model DailyReport
@{
    int ASMAvailablePct = 0;
    int EPPAvailablePct = 0;
    int HTRAvailablePct = 0;

    int ASMSLL = 0;
    int HTRSLL = 0;

    int ASMUnloadTemps = 0;
    int HTRUnloadTemps = 0;

    int reportIndex = (int)DateTime.Now.DayOfWeek;

    int numberOfDaysInWeek = Model.CurrentWeek.OutsByDay.Count;

    ManualReportEntries rpt = Model.ManualReportEntries;

    string myClass;
    List<string> toolsDownGreaterThan12Hours = new();

    foreach (KeyValuePair<string, ToolStateByType> state in Model.ToolStateByType)
    {
        if (state.Key != "Metrology" && state.Key != "Cleans")
            toolsDownGreaterThan12Hours.AddRange(state.Value.ToolsDownGreaterThan12Hours);
    }

    toolsDownGreaterThan12Hours.Sort();
}

@{
    ViewData["Title"] = "Daily Passdown | Mesa Reporting Services";
}

<div aria-label="breadcrumb">
    <ol class="breadcrumb">
        <li class="breadcrumb-item"><a asp-area="" asp-controller="Home" asp-action="Index">Home</a></li>
        <li class="breadcrumb-item"><a asp-area="" asp-controller="ProductionReport" asp-action="Index">Production Reports</a></li>
        <li class="breadcrumb-item active" aria-current="page">Production Passdown Report</li>
    </ol>
</div>
<br />

<div class="text-center">
    <h2>Daily Report</h2>
    <br /><br />
</div>

<button class="btn btn-outline-dark float-start dailyReportTable" onclick="toggleWeek()">View Previous Week</button>
<button class="btn btn-outline-dark float-end dailyReportTable hidden" onclick="toggleWeek()">View Current Week</button>
<br /><br />

<div class="table-responsive dailyReportTable">
    <partial name="_DailyReportPartial" model="@Model.CurrentWeek"/>
</div>

<div class="table-responsive dailyReportTable hidden">
    <partial name="_DailyReportPartial" model="@Model.PreviousWeek" />
</div>

<br />
<h5>Daily Target Summary</h5>
<ul>
    <li>Operator HC: (Days/Nights) @rpt.OperatorHeadcountDays/@rpt.OperatorHeadcountNights</li>
    <li>Total Call Outs: (Days/Nights) @rpt.OperatorCallOutsDays/@rpt.OperatorCallOutsNights</li>
    <li>Engineering HC: @rpt.EngineeringHeadcountDays/@rpt.EngineeringHeadcountNights</li>
    <li>Total Call Outs: (Days/Nights) @rpt.EngineeringCallOutsDays/@rpt.EngineeringCallOutsNights</li>
    <li>Maintenance HC: @rpt.MaintenanceHeadcountDays/@rpt.MaintenanceHeadcountNights</li>
    <li>Total Call Outs: (Days/Nights) @rpt.MaintenanceCallOutsDays/@rpt.MaintenanceCallOutsNights</li>
</ul>
<br />
<ul>
    <li>Bottle Change (@rpt.BottleChanges.Split(',').Length): @string.Join(", ", rpt.BottleChanges.Split(','))</li>
    <li>Daily Part Changes (@rpt.DailyPartChanges.Split(',').Length): @string.Join(", ", rpt.DailyPartChanges.Split(','))</li>
    <li>Weekly Part Changes (@rpt.WeeklyPartChanges.Split(',').Length): @string.Join(", ", rpt.WeeklyPartChanges.Split(','))</li>
</ul>
<br />
<a class="btn btn-light" asp-controller="ProductionReport" asp-action="EditDailyReport">Edit</a>
<br /><br />
<h5>Current Reactors Down(@(Model.ToolStateByType["ASM"].DownTools + Model.ToolStateByType["EPP"].DownTools + Model.ToolStateByType["HTR"].DownTools)):</h5>
<div class="row">
    <div class="col-lg-4">
        ASM(@Model.ToolStateByType["ASM"].DownTools)
        <table class="table table-sm">
            <thead>
                <tr>
                    <th scope="col">Reactor</th>
                    <th scope="col">Owner</th>
                    <th scope="col">Issue</th>
                </tr>
            </thead>
            <tbody>
                @foreach (ToolStateCurrent tool in Model.ToolStateByType["ASM"].ToolStateCurrents)
                {
                    if (tool.BasicStateDescription != "Productive" && tool.ReactorStatus != "Out of Service")
                    {
                        string owner = "";

                        if (Model.ToolStatesByOwner["Maintenance"].Contains(tool.ReactorStatus))
                            owner = "Maint";
                        else if (Model.ToolStatesByOwner["Engineering"].Contains(tool.ReactorStatus))
                            owner = "Eng";
                        else
                            owner = "Prod";

                        <tr>
                            <td>@tool.Tool</td>
                            <td>@owner</td>
                            <td>@tool.Comment</td>
                        </tr>
                    }
                }
            </tbody>
        </table>
    </div>
</div>
<div class="row">
    <div class="col-lg-4">
        EPP(@Model.ToolStateByType["EPP"].DownTools)
        <table class="table table-sm">
            <thead>
                <tr>
                    <th scope="col">Reactor</th>
                    <th scope="col">Owner</th>
                    <th scope="col">Issue</th>
                </tr>
            </thead>
            <tbody>
                @foreach (ToolStateCurrent tool in Model.ToolStateByType["EPP"].ToolStateCurrents)
                {
                    if (tool.BasicStateDescription != "Productive" && tool.ReactorStatus != "Out of Service")
                    {
                        string owner = "";

                        if (Model.ToolStatesByOwner["Maintenance"].Contains(tool.ReactorStatus))
                            owner = "Maint";
                        else if (Model.ToolStatesByOwner["Engineering"].Contains(tool.ReactorStatus))
                            owner = "Eng";
                        else
                            owner = "Prod";

                        <tr>
                            <td>@tool.Tool</td>
                            <td>@owner</td>
                            <td>@tool.Comment</td>
                        </tr>
                    }
                }
            </tbody>
        </table>
    </div>
</div>
<div class="row">
    <div class="col-lg-4">
        HTR(@Model.ToolStateByType["HTR"].DownTools)
        <table class="table table-sm">
            <thead>
                <tr>
                    <th scope="col">Reactor</th>
                    <th scope="col">Owner</th>
                    <th scope="col">Issue</th>
                </tr>
            </thead>
            <tbody>
                @foreach (ToolStateCurrent tool in Model.ToolStateByType["HTR"].ToolStateCurrents)
                {
                    if (tool.BasicStateDescription != "Productive" && tool.ReactorStatus != "Out of Service")
                    {
                        string owner = "";

                        if (Model.ToolStatesByOwner["Maintenance"].Contains(tool.ReactorStatus))
                            owner = "Maint";
                        else if (Model.ToolStatesByOwner["Engineering"].Contains(tool.ReactorStatus))
                            owner = "Eng";
                        else
                            owner = "Prod";

                        <tr>
                            <td>@tool.Tool</td>
                            <td>@owner</td>
                            <td>@tool.Comment</td>
                        </tr>
                    }
                }
            </tbody>
        </table>
    </div>
</div>
<ul>
    <li>Application ENG (0):</li>
    <li>Reactors (Capacity @(Model.NumberOfToolsWaferSize6IN + Model.NumberOfToolsWaferSize8IN))
        <ul>
            <li>150mm - @Model.NumberOfToolsWaferSize6IN</li>
            <li>200mm - @Model.NumberOfToolsWaferSize8IN</li>
        </ul>
    </li>
    <li>Scheduled Reactors (@(Model.NumberOfToolsWaferSize6INScheduled + Model.NumberOfToolsWaferSize8INScheduled)):
        <ul>
            <li>150mm - @Model.NumberOfToolsWaferSize6INScheduled</li>
            <li>200mm - @Model.NumberOfToolsWaferSize8INScheduled</li>
        </ul>
    </li>
    <li>Dual Layer Reactors
        <ul>
            <li>ASM - @(string.Join(',', Model.DualLayerReactors["ASM"]))</li>
            <li>HTR - @(string.Join(',', Model.DualLayerReactors["HTR"]))</li>
            <li>EpiPro - @(string.Join(',', Model.DualLayerReactors["EPP"]))</li>
        </ul>
    </li>
    <li>Engineering Focus Tools (Down > 12 hours)
        <ul>
            <li>@string.Join(",", toolsDownGreaterThan12Hours)</li>
        </ul>
    </li>
    <li>Metrology Down (@Model.ToolStateByType["Metrology"].DownTools):
        @if (Model.ToolStateByType["Metrology"].DownTools > 0)
        {
            <ul>
                @foreach (ToolStateCurrent tool in Model.ToolStateByType["Metrology"].ToolStateCurrents)
                {
                    if (tool.BasicStateDescription != "Productive" && tool.ReactorStatus != "Out of Service")
                    {
                        <li>@tool.Tool</li>
                    }
                }
            </ul>
        }
    </li>
    <li>
        Cleans (@Model.ToolStateByType["Cleans"].DownTools):
        @if (Model.ToolStateByType["Cleans"].DownTools > 0)
        {
            <ul>
                @foreach (ToolStateCurrent tool in Model.ToolStateByType["Cleans"].ToolStateCurrents)
                {
                    if (tool.BasicStateDescription != "Productive" && tool.ReactorStatus != "Out of Service")
                    {
                        <li>@tool.Tool</li>
                    }
                }
            </ul>
        }
    </li>
</ul>
<br /><br />
<div class="table-responsive">
    <table class="table">
        <thead>
            <tr>
                <th scope="col"></th>
                <th scope="col">Monday</th>
                <th scope="col">Tuesday</th>
                <th scope="col">Wednesday</th>
                <th scope="col">Thursday</th>
                <th scope="col">Friday</th>
                <th scope="col">Saturday</th>
                <th scope="col">Sunday</th>
                <th scope="col">WTD</th>
                <th scope="col">Daily / Weekly</th>
            </tr>
            <tr>
                <th scope="col"></th>
                @for (int i = 0; i < 7; i++)
                {
                    <th scope="col">@Model.StartDate.AddDays(i).ToString("MM/dd/yyyy")</th>
                }
                <th scope="col">Actual</th>
                <th scope="col">Target</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td scope="row">ASMs Uptime</td>
                @for (int i = 0; i < 7; i++)
                {
                    if (i < Model.ToolAvailibilityByType["ASM"].Count)
                    {
                        int availiblePct = (int)Math.Round(float.Parse(Model.ToolAvailibilityByType["ASM"][i].AvailablePct));

                        if (availiblePct < 82)
                            myClass = "table-danger text-danger";
                        else
                            myClass = "";

                        <td class="@myClass">@(availiblePct + "%")</td>

                        ASMAvailablePct += availiblePct;
                    }
                    else
                    {
                        <td></td>
                    }
                }
                <td>@(ASMAvailablePct / numberOfDaysInWeek + "%")</td>
                <td>82%</td>
            </tr>
            <tr>
                <td scope="row">EPPs Uptime</td>
                @for (int i = 0; i < 7; i++)
                {
                    if (i < Model.ToolAvailibilityByType["EPP"].Count)
                    {
                        int availiblePct = (int)Math.Round(float.Parse(Model.ToolAvailibilityByType["EPP"][i].AvailablePct));

                        if (availiblePct < 60)
                            myClass = "table-danger text-danger";
                        else
                            myClass = "";

                        <td class="@myClass">@(availiblePct + "%")</td>

                        EPPAvailablePct += availiblePct;
                    }
                    else
                    {
                        <td></td>
                    }
                }
                <td>@(EPPAvailablePct / numberOfDaysInWeek + "%")</td>
                <td>60%</td>
            </tr>
            <tr>
                <td scope="row">HTRs Uptime</td>
                @for (int i = 0; i < 7; i++)
                {
                    if (i < Model.ToolAvailibilityByType["HTR"].Count)
                    {
                        int availiblePct = (int)Math.Round(float.Parse(Model.ToolAvailibilityByType["HTR"][i].AvailablePct));

                        if (availiblePct < 78)
                            myClass = "table-danger text-danger";
                        else
                            myClass = "";

                        <td class="@myClass">@(availiblePct + "%")</td>

                HTRAvailablePct += availiblePct;
                    }
                    else
                    {
                        <td></td>
                    }
                }
                <td>@(HTRAvailablePct / numberOfDaysInWeek + "%")</td>
                <td>78%</td>
            </tr>
            <tr>
                <td scope="row">ASMs SLL Tool Count</td>
                @for (int i = 0; i < 7; i++)
                {
                    if (i < Model.SLLTools.Count())
                    {
                        <td>@Model.SLLTools[i].ASM</td>

                        ASMSLL += @Model.SLLTools[i].ASM;
                    }
                    else
                    {
                        <td></td>
                    }
                }
                <td>@(ASMSLL / numberOfDaysInWeek)</td>
                <td>0</td>
            </tr>
            <tr>
                <td scope="row">HTRs SLL Tool Count</td>
                @for (int i = 0; i < 7; i++)
                {
                    int index = i == 6 ? 0 : i + 1;

                    if (i < Model.SLLTools.Count())
                    {
                        <td>@Model.SLLTools[i].HTR</td>

                        HTRSLL += @Model.SLLTools[i].HTR;
                    }
                    else
                    {
                        <td></td>
                    }
                }
                <td>@(HTRSLL / numberOfDaysInWeek)</td>
                <td>0</td>
            </tr>
            <tr>
                <td scope="row">ASMs &lt;700C (Unload Temps)</td>
                @for (int i = 0; i < 7; i++)
                {
                    if (i < Model.UnloadTempsByDay.Count())
                    {
                        <td>@Model.UnloadTempsByDay[i].ASMUnloadsBelow700</td>

                        ASMUnloadTemps += @Model.UnloadTempsByDay[i].ASMUnloadsBelow700;
                    }
                    else
                    {
                        <td></td>
                    }
                }
                <td>@(ASMUnloadTemps / numberOfDaysInWeek)</td>
                <td>0</td>
            </tr>
            <tr>
                <td scope="row">HTRs &lt;700C (Unload Temps)</td>
                @for (int i = 0; i < 7; i++)
                {
                    if (i < Model.UnloadTempsByDay.Count())
                    {
                        <td>@Model.UnloadTempsByDay[i].HTRUnloadsBelow700</td>

                        HTRUnloadTemps += @Model.UnloadTempsByDay[i].HTRUnloadsBelow700;
                    }
                    else
                    {
                        <td></td>
                    }
                }
                <td>@(HTRUnloadTemps / numberOfDaysInWeek)</td>
                <td>0</td>
            </tr>
        </tbody>
    </table>
</div>