<?php

declare(strict_types = 1);

/**
 * This file is part of the 'Yasumi' package.
 *
 * The easy PHP Library for calculating holidays.
 *
 * Copyright (c) 2015 - 2025 AzuyaLabs
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 *
 * @author Sacha Telgenhof <me at sachatelgenhof dot com>
 */

namespace Yasumi\tests\SouthKorea;

use PHPUnit\Framework\TestCase;
use Yasumi\tests\YasumiBase;

/**
 * Base class for test cases of the South Korea holiday provider.
 */
abstract class SouthKoreaBaseTestCase extends TestCase
{
    use YasumiBase;

    /** Name of the region (e.g. country / state) to be tested. */
    public const REGION = 'SouthKorea';

    /** Timezone in which this provider has holidays defined. */
    public const TIMEZONE = 'Asia/Seoul';

    /** Locale that is considered common for this provider. */
    public const LOCALE = 'ko_KR';

    /** Lunar dates for lunar holidays */
    public const LUNAR_HOLIDAY = [
        'seollal' => [
            '1949' => '1949-01-29', '1950' => '1950-02-17', '1951' => '1951-02-06', '1952' => '1952-01-27', '1953' => '1953-02-14',
            '1954' => '1954-02-04', '1955' => '1955-01-24', '1956' => '1956-02-12', '1957' => '1957-01-31', '1958' => '1958-02-19',
            '1959' => '1959-02-08', '1960' => '1960-01-28', '1961' => '1961-02-15', '1962' => '1962-02-05', '1963' => '1963-01-25',
            '1964' => '1964-02-13', '1965' => '1965-02-02', '1966' => '1966-01-22', '1967' => '1967-02-09', '1968' => '1968-01-30',
            '1969' => '1969-02-17', '1970' => '1970-02-06', '1971' => '1971-01-27', '1972' => '1972-02-15', '1973' => '1973-02-03',
            '1974' => '1974-01-23', '1975' => '1975-02-11', '1976' => '1976-01-31', '1977' => '1977-02-18', '1978' => '1978-02-07',
            '1979' => '1979-01-28', '1980' => '1980-02-16', '1981' => '1981-02-05', '1982' => '1982-01-25', '1983' => '1983-02-13',
            '1984' => '1984-02-02', '1985' => '1985-02-20', '1986' => '1986-02-09', '1987' => '1987-01-29', '1988' => '1988-02-18',
            '1989' => '1989-02-06', '1990' => '1990-01-27', '1991' => '1991-02-15', '1992' => '1992-02-04', '1993' => '1993-01-23',
            '1994' => '1994-02-10', '1995' => '1995-01-31', '1996' => '1996-02-19', '1997' => '1997-02-08', '1998' => '1998-01-28',
            '1999' => '1999-02-16', '2000' => '2000-02-05', '2001' => '2001-01-24', '2002' => '2002-02-12', '2003' => '2003-02-01',
            '2004' => '2004-01-22', '2005' => '2005-02-09', '2006' => '2006-01-29', '2007' => '2007-02-18', '2008' => '2008-02-07',
            '2009' => '2009-01-26', '2010' => '2010-02-14', '2011' => '2011-02-03', '2012' => '2012-01-23', '2013' => '2013-02-10',
            '2014' => '2014-01-31', '2015' => '2015-02-19', '2016' => '2016-02-08', '2017' => '2017-01-28', '2018' => '2018-02-16',
            '2019' => '2019-02-05', '2020' => '2020-01-25', '2021' => '2021-02-12', '2022' => '2022-02-01', '2023' => '2023-01-22',
            '2024' => '2024-02-10', '2025' => '2025-01-29', '2026' => '2026-02-17', '2027' => '2027-02-07', '2028' => '2028-01-27',
            '2029' => '2029-02-13', '2030' => '2030-02-03', '2031' => '2031-01-23', '2032' => '2032-02-11', '2033' => '2033-01-31',
            '2034' => '2034-02-19', '2035' => '2035-02-08', '2036' => '2036-01-28', '2037' => '2037-02-15', '2038' => '2038-02-04',
            '2039' => '2039-01-24', '2040' => '2040-02-12', '2041' => '2041-02-01', '2042' => '2042-01-22', '2043' => '2043-02-10',
            '2044' => '2044-01-30', '2045' => '2045-02-17', '2046' => '2046-02-06', '2047' => '2047-01-26', '2048' => '2048-02-14',
            '2049' => '2049-02-02', '2050' => '2050-01-23',
        ],
        'buddhasBirthday' => [
            '1949' => '1949-05-05', '1950' => '1950-05-24', '1951' => '1951-05-13', '1952' => '1952-05-01', '1953' => '1953-05-20',
            '1954' => '1954-05-10', '1955' => '1955-05-29', '1956' => '1956-05-17', '1957' => '1957-05-07', '1958' => '1958-05-26',
            '1959' => '1959-05-15', '1960' => '1960-05-03', '1961' => '1961-05-22', '1962' => '1962-05-11', '1963' => '1963-05-01',
            '1964' => '1964-05-19', '1965' => '1965-05-08', '1966' => '1966-05-27', '1967' => '1967-05-16', '1968' => '1968-05-05',
            '1969' => '1969-05-23', '1970' => '1970-05-12', '1971' => '1971-05-02', '1972' => '1972-05-20', '1973' => '1973-05-10',
            '1974' => '1974-04-29', '1975' => '1975-05-18', '1976' => '1976-05-06', '1977' => '1977-05-25', '1978' => '1978-05-14',
            '1979' => '1979-05-03', '1980' => '1980-05-21', '1981' => '1981-05-11', '1982' => '1982-05-01', '1983' => '1983-05-20',
            '1984' => '1984-05-08', '1985' => '1985-05-27', '1986' => '1986-05-16', '1987' => '1987-05-05', '1988' => '1988-05-23',
            '1989' => '1989-05-12', '1990' => '1990-05-02', '1991' => '1991-05-21', '1992' => '1992-05-10', '1993' => '1993-05-28',
            '1994' => '1994-05-18', '1995' => '1995-05-07', '1996' => '1996-05-24', '1997' => '1997-05-14', '1998' => '1998-05-03',
            '1999' => '1999-05-22', '2000' => '2000-05-11', '2001' => '2001-05-01', '2002' => '2002-05-19', '2003' => '2003-05-08',
            '2004' => '2004-05-26', '2005' => '2005-05-15', '2006' => '2006-05-05', '2007' => '2007-05-24', '2008' => '2008-05-12',
            '2009' => '2009-05-02', '2010' => '2010-05-21', '2011' => '2011-05-10', '2012' => '2012-05-28', '2013' => '2013-05-17',
            '2014' => '2014-05-06', '2015' => '2015-05-25', '2016' => '2016-05-14', '2017' => '2017-05-03', '2018' => '2018-05-22',
            '2019' => '2019-05-12', '2020' => '2020-04-30', '2021' => '2021-05-19', '2022' => '2022-05-08', '2023' => '2023-05-27',
            '2024' => '2024-05-15', '2025' => '2025-05-05', '2026' => '2026-05-24', '2027' => '2027-05-13', '2028' => '2028-05-02',
            '2029' => '2029-05-20', '2030' => '2030-05-09', '2031' => '2031-05-28', '2032' => '2032-05-16', '2033' => '2033-05-06',
            '2034' => '2034-05-25', '2035' => '2035-05-15', '2036' => '2036-05-03', '2037' => '2037-05-22', '2038' => '2038-05-11',
            '2039' => '2039-04-30', '2040' => '2040-05-18', '2041' => '2041-05-07', '2042' => '2042-05-26', '2043' => '2043-05-16',
            '2044' => '2044-05-05', '2045' => '2045-05-24', '2046' => '2046-05-13', '2047' => '2047-05-02', '2048' => '2048-05-20',
            '2049' => '2049-05-09', '2050' => '2050-05-28',
        ],
        'chuseok' => [
            '1949' => '1949-10-06', '1950' => '1950-09-26', '1951' => '1951-09-15', '1952' => '1952-10-03', '1953' => '1953-09-22',
            '1954' => '1954-09-11', '1955' => '1955-09-30', '1956' => '1956-09-19', '1957' => '1957-09-08', '1958' => '1958-09-27',
            '1959' => '1959-09-17', '1960' => '1960-10-05', '1961' => '1961-09-24', '1962' => '1962-09-13', '1963' => '1963-10-02',
            '1964' => '1964-09-20', '1965' => '1965-09-10', '1966' => '1966-09-29', '1967' => '1967-09-18', '1968' => '1968-10-06',
            '1969' => '1969-09-26', '1970' => '1970-09-15', '1971' => '1971-10-03', '1972' => '1972-09-22', '1973' => '1973-09-11',
            '1974' => '1974-09-30', '1975' => '1975-09-20', '1976' => '1976-09-08', '1977' => '1977-09-27', '1978' => '1978-09-17',
            '1979' => '1979-10-05', '1980' => '1980-09-23', '1981' => '1981-09-12', '1982' => '1982-10-01', '1983' => '1983-09-21',
            '1984' => '1984-09-10', '1985' => '1985-09-29', '1986' => '1986-09-18', '1987' => '1987-10-07', '1988' => '1988-09-25',
            '1989' => '1989-09-14', '1990' => '1990-10-03', '1991' => '1991-09-22', '1992' => '1992-09-11', '1993' => '1993-09-30',
            '1994' => '1994-09-20', '1995' => '1995-09-09', '1996' => '1996-09-27', '1997' => '1997-09-16', '1998' => '1998-10-05',
            '1999' => '1999-09-24', '2000' => '2000-09-12', '2001' => '2001-10-01', '2002' => '2002-09-21', '2003' => '2003-09-11',
            '2004' => '2004-09-28', '2005' => '2005-09-18', '2006' => '2006-10-06', '2007' => '2007-09-25', '2008' => '2008-09-14',
            '2009' => '2009-10-03', '2010' => '2010-09-22', '2011' => '2011-09-12', '2012' => '2012-09-30', '2013' => '2013-09-19',
            '2014' => '2014-09-08', '2015' => '2015-09-27', '2016' => '2016-09-15', '2017' => '2017-10-04', '2018' => '2018-09-24',
            '2019' => '2019-09-13', '2020' => '2020-10-01', '2021' => '2021-09-21', '2022' => '2022-09-10', '2023' => '2023-09-29',
            '2024' => '2024-09-17', '2025' => '2025-10-06', '2026' => '2026-09-25', '2027' => '2027-09-15', '2028' => '2028-10-03',
            '2029' => '2029-09-22', '2030' => '2030-09-12', '2031' => '2031-10-01', '2032' => '2032-09-19', '2033' => '2033-09-08',
            '2034' => '2034-09-27', '2035' => '2035-09-16', '2036' => '2036-10-04', '2037' => '2037-09-24', '2038' => '2038-09-13',
            '2039' => '2039-10-02', '2040' => '2040-09-21', '2041' => '2041-09-10', '2042' => '2042-09-28', '2043' => '2043-09-17',
            '2044' => '2044-10-05', '2045' => '2045-09-25', '2046' => '2046-09-15', '2047' => '2047-10-04', '2048' => '2048-09-22',
            '2049' => '2049-09-11', '2050' => '2050-09-30',
        ],
    ];
}
