@{
/******************************************************************************
// MARECHAI: Master repository of computing history artifacts information
// ----------------------------------------------------------------------------
//
// Author(s)      : Natalia Portillo <claunia@claunia.com>
//
// --[ License ] --------------------------------------------------------------
//
//     This program is free software: you can redistribute it and/or modify
//     it under the terms of the GNU General Public License as
//     published by the Free Software Foundation, either version 3 of the
//     License, or (at your option) any later version.
//
//     This program is distributed in the hope that it will be useful,
//     but WITHOUT ANY WARRANTY; without even the implied warranty of
//     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//     GNU General Public License for more details.
//
//     You should have received a copy of the GNU General Public License
//     along with this program.  If not, see <http://www.gnu.org/licenses/>.
//
// ----------------------------------------------------------------------------
// Copyright © 2003-2026 Natalia Portillo
*******************************************************************************/
}

@page "/company/{Id:int}"
@using Marechai.Data
@using Marechai.Database.Models
@inherits OwningComponentBase<CompaniesService>
@inject IStringLocalizer<CompaniesService> L
@inject CompanyLogosService                CompanyLogosService
@inject IWebHostEnvironment                Host

@if(!_loaded)
{
    <p align="center">@L["Loading..."]</p>

    return;
}

@if(_company is null)
{
    <p align="center">@L["Company not found."]</p>

    return;
}
<div class="container-fluid">
    <p align="center">
        @if(_company.LastLogo != null && File.Exists(Path.Combine(Host.WebRootPath, "assets/logos", _company.LastLogo + ".svg")))
        {
            <picture>
                <source srcset="/assets/logos/@(_company.LastLogo).svg" type="image/svg+xml">
                <source srcset="/assets/logos/webp/1x/@(_company.LastLogo).webp,
/assets/logos/webp/2x/@(_company.LastLogo).webp 2x,
/assets/logos/webp/3x/@(_company.LastLogo).webp 3x" type="image/webp">
                <img alt="" height="auto" src="/assets/logos/png/1x/@(_company.LastLogo).png"
                     srcset="/assets/logos/png/1x/@(_company.LastLogo).png,
                         /assets/logos/png/2x/@(_company.LastLogo).png 2x,
                         /assets/logos/png/3x/@(_company.LastLogo).png 3x" style="max-height: 256px; max-width: 256px"
                     width="auto"/>
            </picture>
        }
    </p>
    <div class="row">
        @if(_logos != null && _logos.Count > 1)
        {
            <div class="col-3">
                <Carousel @bind-SelectedSlide="@_selectedSlide" ShowControls="true" ShowIndicators="true">
                    @foreach(CompanyLogo logo in _logos.Where(logo => File.Exists(Path.Combine(Host.WebRootPath, "assets/logos", logo.Guid + ".svg"))))
                    {
                        <CarouselSlide Name="@logo.Guid.ToString()">
                            <div style="width: 256px; height: 256px; margin: auto;">
                                <picture>
                                    <source srcset="/assets/logos/@(logo.Guid).svg" type="image/svg+xml">
                                    <source srcset="/assets/logos/webp/1x/@(logo.Guid).webp,
    /assets/logos/webp/1x/@(logo.Guid).webp 2x,
    /assets/logos/webp/1x/@(logo.Guid).webp 3x" type="image/webp">
                                    <img alt="" class="d-block w-100" height="auto"
                                         src="/assets/logos/png/1x/@(logo.Guid).png"
                                         srcset="/assets/logos/png/1x/@(logo.Guid).png,
                             /assets/logos/png/1x/@(logo.Guid).png 2x,
                             /assets/logos/png/1x/@(logo.Guid).webp 3x" style="max-height: 256px; max-width: 256px"
                                         width="auto"/>
                                </picture>
                            </div>
                            @if(logo.Year.HasValue)
                            {
                                <div
                                    style="text-align: center;">@(string.Format(L["in use since {0}"], logo.Year))</div>
                            }
                        </CarouselSlide>
                    }
                </Carousel>
            </div>
        }
        <div class="col-6">
            <table class="table">
                <tr>
                    <th class="text-center" colspan="2">
                        <b>@_company.Name</b>
                    </th>
                </tr>
                @if(_company.Founded.HasValue)
                {
                    <tr>
                        <th class="text-right">@L["Founded"]</th>
                        @if(_company.FoundedMonthIsUnknown)
                        {
                            <td>@_company.Founded.Value.Year.</td>
                        }
                        else if(_company.FoundedDayIsUnknown)
                        {
                            <td>@($"{_company.Founded.Value:Y}").</td>
                        }
                        else
                        {
                            <td>@_company.Founded.Value.ToLongDateString().</td>
                        }
                    </tr>
                }
                @if(!string.IsNullOrEmpty(_company.LegalName))
                {
                    <tr>
                        <th class="text-right">@L["Legal name"]</th>
                        <td>@_company.LegalName</td>
                    </tr>
                }
                <tr>
                    <th class="text-right">@L["Country"]</th>
                    <td>
                        @if(_company.Country != null)
                        {
                            <a href="/companies/country/@_company.CountryId">
                                @if(File.Exists(Path.Combine(Host.WebRootPath, "assets/flags/countries", $"{_company.CountryId:D3}.svg")))
                                {
                                    <picture>
                                        <source srcset="/assets/flags/countries/@($"{_company.CountryId:D3}").svg"
                                                type="image/svg+xml">
                                        <source srcset="/assets/flags/countries/webp/1x/@($"{_company.CountryId:D3}").webp,
        /assets/flags/countries/webp/1x/@($"{_company.CountryId:D3}").webp 2x,
        /assets/flags/countries/webp/1x/@($"{_company.CountryId:D3}").webp 3x" type="image/webp">
                                        <img alt="" height="32"
                                             src="/assets/flags/countries/png/1x/@($"{_company.CountryId:D3}").png"
                                             srcset="/assets/flags/countries/png/1x/@($"{_company.CountryId:D3}").png,
                                 /assets/flags/countries/png/1x/@($"{_company.CountryId:D3}").png 2x,
                                 /assets/flags/countries/png/1x/@($"{_company.CountryId:D3}").webp 3x"/>
                                    </picture>
                                }
                                @L[_company.Country]
                            </a>
                        }
                        else
                        {
                            @L["Unknown (country)"]
                        }
                    </td>
                </tr>
                <tr>
                    <th class="text-right">@L["Status"]</th>
                    @switch(_company.Status)
                    {
                        case CompanyStatus.Unknown:
                            <td>@L["Current company status is unknown."]</td>

                            break;
                        case CompanyStatus.Active:
                            <td>@L["Company is active."]</td>

                            break;
                        case CompanyStatus.Sold:
                            if(_company.Sold != null)
                            {
                                if(_soldTo != null)
                                {
                                    <td>
                                        <a href="/company/@_soldTo.Id">
                                            @string.Format(L["Company sold to {0} on {1}."],
                                                           _soldTo.Name,
                                                           _company.SoldMonthIsUnknown
                                                               ? $"{_company.Sold.Value.Year}"
                                                               : _company.SoldDayIsUnknown
                                                                   ? $"{_company.Sold.Value:Y}"
                                                                   : _company.SoldMonthIsUnknown
                                                                       ? $"{_company.Sold.Value.Year}"
                                                                       : _company.SoldDayIsUnknown
                                                                           ? $"{_company.Sold.Value:Y}"
                                                                           : _company.Sold.Value.ToLongDateString())
                                        </a>
                                    </td>
                                }
                                else
                                {
                                    <td>@string.Format(L["Company sold on {0} to an unknown company."],
                                                       _company.SoldMonthIsUnknown
                                                           ? $"{_company.Sold.Value.Year}"
                                                           : _company.SoldDayIsUnknown
                                                               ? $"{_company.Sold.Value:Y}"
                                                               : _company.Sold.Value.ToLongDateString())</td>
                                }
                            }
                            else
                            {
                                if(_soldTo != null)
                                {
                                    <td>
                                        <a href="/company/@_soldTo.Id">
                                            @string.Format(L["Company sold to {0} on an unknown date."], _soldTo.Name)
                                        </a>
                                    </td>
                                }
                                else
                                {
                                    <td>@L["Company was sold to an unknown company on an unknown date."]</td>
                                }
                            }

                            break;
                        case CompanyStatus.Merged:
                            if(_company.Sold != null)
                            {
                                if(_soldTo != null)
                                {
                                    <td>
                                        <a href="/company/@_soldTo.Id">@string.Format(L["Company merged on {0} to form {1}."],
                                                                                      _company.SoldMonthIsUnknown
                                                                                          ? $"{_company.Sold.Value.Year}"
                                                                                          : _company.SoldDayIsUnknown
                                                                                              ? $"{_company.Sold.Value:Y}"
                                                                                              : _company.Sold.Value.ToLongDateString(),
                                                                                      _soldTo.Name)</a>
                                    </td>
                                }
                                else
                                {
                                    <td>@string.Format(L["Company merged on {0} to form an unknown company."],
                                                       _company.SoldMonthIsUnknown
                                                           ? $"{_company.Sold.Value.Year}"
                                                           : _company.SoldDayIsUnknown
                                                               ? $"{_company.Sold.Value:Y}"
                                                               : _company.Sold.Value.ToLongDateString())</td>
                                }
                            }
                            else
                            {
                                if(_soldTo != null)
                                {
                                    <td>
                                        <a href="/company/@_soldTo.Id">@string.Format(L["Company merged on an unknown date to form {0}."], _soldTo.Name)</a>
                                    </td>
                                }
                                else
                                {
                                    <td>@L["Company merged to form an unknown company on an unknown date."]</td>
                                }
                            }

                            break;
                        case CompanyStatus.Bankrupt:
                            if(_company.Sold != null)
                            {
                                <td>@string.Format(L["Company declared bankruptcy on {0}."],
                                                   _company.SoldMonthIsUnknown
                                                       ? $"{_company.Sold.Value.Year}"
                                                       : _company.SoldDayIsUnknown
                                                           ? $"{_company.Sold.Value:Y}"
                                                           : _company.Sold.Value.ToLongDateString())</td>
                            }
                            else
                            {
                                <td>@L["Company declared bankruptcy on an unknown date."]</td>
                            }

                            break;
                        case CompanyStatus.Defunct:
                            if(_company.Sold != null)
                            {
                                <td>@string.Format(L["Company ceased operations on {0}."],
                                                   _company.SoldMonthIsUnknown
                                                       ? $"{_company.Sold.Value.Year}"
                                                       : _company.SoldDayIsUnknown
                                                           ? $"{_company.Sold.Value:Y}"
                                                           : _company.Sold.Value.ToLongDateString())</td>
                            }
                            else
                            {
                                <td>@L["Company ceased operations on an unknown date."]</td>
                            }

                            break;
                        case CompanyStatus.Renamed:
                            if(_company.Sold != null)
                            {
                                if(_soldTo != null)
                                {
                                    <td>
                                        <a href="/company/@_soldTo.Id">@string.Format(L["Company renamed to {0} on {1}."],
                                                                                      _soldTo.Name,
                                                                                      _company.SoldMonthIsUnknown
                                                                                          ? $"{_company.Sold.Value.Year}"
                                                                                          : _company.SoldDayIsUnknown
                                                                                              ? $"{_company.Sold.Value:Y}"
                                                                                              : _company.Sold.Value.ToLongDateString())</a>
                                    </td>
                                }
                                else
                                {
                                    <td>@string.Format(L["Company was renamed on {0} to an unknown name."],
                                                       _company.SoldMonthIsUnknown
                                                           ? $"{_company.Sold.Value.Year}"
                                                           : _company.SoldDayIsUnknown
                                                               ? $"{_company.Sold.Value:Y}"
                                                               : _company.Sold.Value.ToLongDateString())</td>
                                }
                            }
                            else
                            {
                                if(_soldTo != null)
                                {
                                    <td>
                                        <a href="/company/@_soldTo.Id">
                                            @string.Format(L["Company renamed to {0} on an unknown date."], _soldTo.Name)
                                        </a>
                                    </td>
                                }
                                else
                                {
                                    <td>@L["Company renamed to an unknown name on an unknown date."]</td>
                                }
                            }

                            break;
                        default:
                            throw new ArgumentOutOfRangeException();
                    }
                </tr>
                <tr>
                    <th class="text-right">@L["Address"]</th>
                    <td>
                        @_company.Address
                        <br>
                        @if(_company.City != _company.Province)
                        {
                            @_company.City
                            <br>
                        }
                        @_company.PostalCode @_company.Province
                    </td>
                </tr>
                @if(!string.IsNullOrEmpty(_company.Website) || !string.IsNullOrEmpty(_company.Twitter) || !string.IsNullOrEmpty(_company.Facebook))
                {
                    <tr>
                        <th class="text-right">@L["Links"]</th>
                        <td>
                            @if(!string.IsNullOrEmpty(_company.Website))
                            {
                                <a href="@_company.Website">@L["Website"]</a>
                                <br/>
                            }
                            @if(!string.IsNullOrEmpty(_company.Twitter))
                            {
                                <a href="https://www.twitter.com/@_company.Twitter">Twitter</a>
                                <br/>
                            }
                            @if(!string.IsNullOrEmpty(_company.Facebook))
                            {
                                <a href="https://www.facebook.com/@_company.Facebook">Facebook</a>
                                <br/>
                            }
                        </td>
                    </tr>
                }
            </table>
        </div>
    </div>
    @{
        // TODO: Accordion
    }
    <div class="row" id="itemsAccordion">
        <div class="card">
            @if(_computers.Count > 0)
            {
                <div class="card-header" id="headingComputers">
                    <h5 class="mb-0">
                        <button aria-controls="collapseComputers" aria-expanded="false" class="btn btn-info"
                                data-target="#collapseComputers" data-toggle="collapse" @onclick="@CollapseComputers">
                            @((MarkupString)string.Format(L["<ok>{0}</ok> computers known."], _computers.Count).Replace("<ok>", "<span class=\"badge badge-success\">").Replace("</ok>", "</span>"))
                        </button>
                    </h5>
                </div>
                <div aria-labelledby="headingComputers" class="@(ComputersCollapsed ? "collapse" : "")"
                     data-parent="#itemsAccordion" id="collapseComputers">
                    <div class="card-body">
                        @foreach(Machine computer in _computers)
                        {
                            <a href="/machine/@computer.Id">
                                @computer.Name
                            </a>
                            <br/>
                        }
                    </div>
                </div>
            }
            else
            {
                <div class="card-header" id="headingComputers">
                    <h5 class="mb-0">
                        <button class="btn btn-info">
                            @((MarkupString)L["<red>No</red> computers known."].ToString().Replace("<red>", "<span class=\"badge badge-danger\">").Replace("</red>", "</span>"))
                        </button>
                    </h5>
                </div>
            }
            @if(_consoles.Count > 0)
            {
                <div class="card-header" id="headingConsoles">
                    <h5 class="mb-0">
                        <button aria-controls="collapseConsoles" aria-expanded="false" class="btn btn-info"
                                data-target="#collapseConsoles" data-toggle="collapse" @onclick="@CollapseConsoles">
                            @((MarkupString)string.Format(L["<ok>{0}</ok> videogame consoles known."], _consoles.Count).Replace("<ok>", "<span class=\"badge badge-success\">").Replace("</ok>", "</span>"))
                        </button>
                    </h5>
                </div>
                <div aria-labelledby="headingConsoles" class="@(ConsolesCollapsed ? "collapse" : "")"
                     data-parent="#itemsAccordion" id="collapseConsoles">
                    <div class="card-body">
                        @foreach(Machine console in _consoles)
                        {
                            <a href="/machine/@console.Id">
                                @console.Name
                            </a>
                            <br/>
                        }
                    </div>
                </div>
            }
            else
            {
                <div class="card-header" id="headingComputers">
                    <h5 class="mb-0">
                        <button class="btn btn-info">
                            @((MarkupString)L["<red>No</red> videogame consoles known."].ToString().Replace("<red>", "<span class=\"badge badge-danger\">").Replace("</red>", "</span>"))
                        </button>
                    </h5>
                </div>
            }
        </div>
    </div>
    @if(_description != null)
    {
        <hr/>
        <div class="container">
            @((MarkupString)_description)
        </div>
    }
</div>
<style>
    .carousel-indicators {
        position: absolute;
        bottom: -50px;
    }

    .carousel-indicators li {
        background-color: black;
    }

    .carousel-control-prev,
    .carousel-control-next {
        filter: sepia(100%) saturate(200%) brightness(0%) hue-rotate(330deg);
    }
</style>